2009-03-03 10 views
5

У меня есть некоторый код в моем приложении, который выглядит примерно так:Почему Какао иногда возвращает пустую строку?

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

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

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

Некоторые больше контекста/спекуляции:

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

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

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

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

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

+0

«Но возможно ли, что Cocoa возвращает здесь нулевую строку, а не ожидаемое значение?» «Нуль-строка» будет либо NULL (C-string), либо nil (NSString).Пустая строка совсем другая: это строка, в которой нет символов, тогда как NULL/nil вообще не является строкой. –

+0

Это не мое понимание того, что такое «пустая строка». Когда я говорю «пустая строка» выше, я имею в виду «пустую строку», т. Е. @ «» В Objective-C или «» в C. Значение nil/NULL приводит к сбою приложения. –

+0

"Null" означает 0. Нулевой символ равен '\ 0'; т. е. 0. Нулевой указатель равен 0. В C нет такой вещи, как «пустая строка», потому что если она равна null, это не строка; это всего лишь 0. –

ответ

6

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

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

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

+0

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

+2

Это не «самый вероятный сценарий»; это сценарий * только *. NULL дает вам исключение. Любая непустая строка получает непустую строку. Только пустая строка получает пустую строку. Простое доказательство: NSLog длина в (strlen (hash)) и длина (длина по умолчанию). –

4

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

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

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

+3

Должен быть способ обнаружения взломанного телефона, а затем отказаться от поддержки пользователей. Сколько времени вы потратили на это из-за этого? Это еще не все. – mxcl

+0

Трудно быть уверенным, но я думаю, что это заняло у меня около двадцати часов - и я нашел решение случайно! С другой стороны, они платили клиентам. Тем не менее, я сказал, что я оставляю за собой право не поддерживать телефоны с ограниченными правами. Я написал больше в блоге приложений: http://www.yummyapp.com/2009/05/pirates-and-jail-break.html –

Смежные вопросы