Это сбой, потому что errmsg
не является объектом Objective-C, который вам требуется при использовании замены %@
.errmsg
- это char *
, что означает, что вы должны использовать %s
.
Что касается причины сбоя ....
sqlite3_open
определяется как:
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
Ваш db
объявлен как sqlite3*
.Другими словами, вы передаете не то, что нужно. Вы должны делать следующее:
sqlite3_open(cDatabasePath, &db)
Хотя ваше желание понять API SQLite C велико, я все же думаю, что вам следует использовать FMDB.Это действительно уменьшает такие ошибки и позволяет вам сосредоточиться на реальных проблемах с вашим кодом.