SQLite Access в Objective-C и Какао

Я нахожусь в процессе изучения Objective-C для разработки под Mac / iPhone и решил попробовать написать что-то полезное, не глядя на Библию (Aaron Hillegass: Cocoa Programming 3rd Edition).

Я пишу простую игру-головоломку. Данные, которые определяют уровни, хранятся в виде строки в базе данных SQLite и считываются в объект уровня с этой строкой кода:

tempLevel.levelData = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

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

Когда эта строка кода выполняется, я получаю следующую ошибку: *** + [NSString stringWithUTF8String:]: NULL cString

Я был бы очень признателен за любую помощь, которую вы можете оказать. Если вам нужна дополнительная информация, я был бы рад предоставить ее.

Спасибо!

12.10.2009 23:06:24
Рассматривали ли вы использовать FMDB или PLDatabase - оба хорошие обертки SQLite?
nall 12.10.2009 23:25:53
2 ОТВЕТА
РЕШЕНИЕ

На самом деле это не ответ, но нет веской причины иметь дело с sqlite напрямую, когда есть несколько отличных упаковщиков:

http://cocoaheads.byu.edu/resources/sqlite

2
13.10.2009 01:50:14
Есть две причины не использовать обертку. Во-первых, их довольно много, и я понятия не имею, хорошие они или плохие, и это зависит от кода, который я не написал, что раздражает. Кроме того, я думал, что доступ к базе данных был довольно необходимым навыком на любом языке, поэтому я подумал, что это хорошая идея, чтобы изучить его для Objective-C. Я мог бы попробовать обертку.
danpalmer 13.10.2009 06:21:30
это не столько хороший или плохой код, сколько то, что по сути является стандартным кодом для sqlite. это было сделано так много раз, что его повторное редактирование займет гораздо больше времени, чем просто поиск подходящей обертки, чтобы вы могли сосредоточиться на своем приложении и sql.
pxl 13.10.2009 16:45:05

Скорее всего это ошибка в compiledStatement. В целом, вам следует sqlite3_column_textсначала убедиться, что вы получаете реальное значение , поскольку возврат NULLчасто является «правильным» ответом на то, что вы просите.

1
13.10.2009 01:51:29
Скомпилированный оператор очень прост и работает для двух других частей данных, которые я получаю. В столбце 1 есть строковые данные, поэтому они должны быть возвращены, если будут возвращены другие данные. Было бы бессмысленно возвращать одну часть записи, но не другие.
danpalmer 13.10.2009 08:10:14
Независимо от того, если проблема не с compiledStatement, то это просто лежит где-то еще в вашем вызове. Вы уверены, что в столбце 1 есть строка? Вы проверили базу данных, используя sqlite3в Терминале? Если это так, то я думаю, что нам нужно увидеть больше кода, так как это, вероятно, что-то еще с контекстом sqlite3.
G Gordon Worley III 13.10.2009 19:17:16