В моем приложении есть код, который выглядит примерно так:
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
Это работает для меня каждый раз; Я никогда не видел, чтобы это не работало. Большинство моих пользователей не испытывают проблем (насколько я знаю). Однако я нахожу, что postHash
является пустой строкой (@""
) для некоторых пользователей иногда.
Может кто-нибудь объяснить, почему?
Еще немного контекста / спекуляции:
Это, кажется, происходит только на взломанных телефонах. Есть ли в них что-то другое? Я понимаю, что обычно меньше памяти доступно. Что-нибудь еще, что могло бы помочь здесь?
postHash
используется в ячейке таблицы и иногда считается правильно заполненным, поэтому я вполне уверен, что вызов базы данных должен работать. На самом деле, если в базе данных также есть пустая строка, это из-за очень похожего фрагмента кода, поэтому вопрос остается.
hash
, безусловно, возвращается с ненулевым значением. Если я заставлю NULL здесь, приложение вылетает. Точно так же, postHash
не является nil
, так как это также может привести к сбою приложения (по той же причине).
Я думаю, что это, возможно, связано с памятью. Если метод пытается выделить слишком много памяти до того, как -didReceiveMemoryWarning
может быть вызван, что произойдет? Я знаю, что в какой-то момент Springboard выбрасывает приложение. Но возможно ли, что Какао возвращает здесь пустую строку, а не ожидаемое значение? Я слышал о нескольких сообщениях, которые, насколько я могу судить, могли быть вызваны только пустой строкой, в которой должно было присутствовать что-то более длинное.
Любые другие предположения, теории или идеи приветствуются.