Почему Какао иногда возвращает пустую строку? - PullRequest
5 голосов
/ 04 марта 2009

В моем приложении есть код, который выглядит примерно так:

char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];

Это работает для меня каждый раз; Я никогда не видел, чтобы это не работало. Большинство моих пользователей не испытывают проблем (насколько я знаю). Однако я нахожу, что postHash является пустой строкой (@"") для некоторых пользователей иногда.

Может кто-нибудь объяснить, почему?

Еще немного контекста / спекуляции:

Это, кажется, происходит только на взломанных телефонах. Есть ли в них что-то другое? Я понимаю, что обычно меньше памяти доступно. Что-нибудь еще, что могло бы помочь здесь?

postHash используется в ячейке таблицы и иногда считается правильно заполненным, поэтому я вполне уверен, что вызов базы данных должен работать. На самом деле, если в базе данных также есть пустая строка, это из-за очень похожего фрагмента кода, поэтому вопрос остается.

hash, безусловно, возвращается с ненулевым значением. Если я заставлю NULL здесь, приложение вылетает. Точно так же, postHash не является nil, так как это также может привести к сбою приложения (по той же причине).

Я думаю, что это, возможно, связано с памятью. Если метод пытается выделить слишком много памяти до того, как -didReceiveMemoryWarning может быть вызван, что произойдет? Я знаю, что в какой-то момент Springboard выбрасывает приложение. Но возможно ли, что Какао возвращает здесь пустую строку, а не ожидаемое значение? Я слышал о нескольких сообщениях, которые, насколько я могу судить, могли быть вызваны только пустой строкой, в которой должно было присутствовать что-то более длинное.

Любые другие предположения, теории или идеи приветствуются.

Ответы [ 2 ]

6 голосов
/ 04 марта 2009

Однако я нахожу, что postHash является пустой строкой (@"") для некоторых пользователей иногда.

Кто-нибудь может объяснить, почему?

Поскольку hash - пустая строка (hash[0] == '\0').

4 голосов
/ 21 марта 2009

Я наконец нашел решение для этого. Я собираюсь дать Питеру принятый ответ, так как он прав, но причина, по которой я получил пустую строку, ... интересна.

База данных заполнена правильно. Запрос также правильный. Разница между моим телефоном и моими пользователями заключается в том, что у них сломаны тюремные телефоны. И, по-видимому, сломанные в тюрьме айфоны иногда используют другую версию SQLite, чем та, которая есть в поставляемых версиях iPhone OS.

Изменение версии выявило ошибку в моем коде, из-за которой один из параметров был установлен неправильно и sqlite3_column_text вернул пустую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...