Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone应用程序因sqlite3_bind_text()崩溃_Iphone_Objective C_Sqlite - Fatal编程技术网

iPhone应用程序因sqlite3_bind_text()崩溃

iPhone应用程序因sqlite3_bind_text()崩溃,iphone,objective-c,sqlite,Iphone,Objective C,Sqlite,我正在尝试制作一个简单的应用程序来存储和显示闪存卡,但是我在让我的SQLite正常工作的过程中遇到了麻烦。数据库连接很好,但是当我尝试插入时,它崩溃了,并且没有显示出哪里出了问题。这是我用来将闪存卡插入表中的代码 const char *insert = "INSERT OR REPLACE INTO LIST (TERM, DEFINITION) VALUES (?, ?);"; sqlite3_stmt *statement; sqlite3_prepare_v2(database, ins

我正在尝试制作一个简单的应用程序来存储和显示闪存卡,但是我在让我的SQLite正常工作的过程中遇到了麻烦。数据库连接很好,但是当我尝试插入时,它崩溃了,并且没有显示出哪里出了问题。这是我用来将闪存卡插入表中的代码

const char *insert = "INSERT OR REPLACE INTO LIST (TERM, DEFINITION) VALUES (?, ?);";
sqlite3_stmt *statement;
sqlite3_prepare_v2(database, insert, -1, &statement, nil);
sqlite3_bind_text(statement, 1, [term UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(statement, 2, [def UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(statement);
sqlite3_finalize(statement);

我已经确定bind text方法是我前面放置的一些NSLog()方法的薄弱环节。在本例中,term和def是nsstring,它们确实包含正确的值(我可以肯定这一点)。任何帮助都将不胜感激。我还没有完全掌握便携式c。

不是100%为什么它不工作,但我有一些建议:

除掉旧毛病;在insert语句的末尾,我从来没有在我的语句中使用过它

将prepare和step放入这样的if语句中

if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) {
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(db));
}
if (SQLITE_DONE != sqlite3_step(statement)) {
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db));
}
这些可能都没有帮助,但它可能会让你更接近到底出了什么问题


还有一件事可能会有所帮助。当我使用SQLite时,如果我对db进行了更改或者没有将正确的数据放入数据库,那将是一件非常痛苦的事情。我花了很多时间重置iPhone模拟器并清理构建

如果使用包装器,或者只使用核心数据,就不会出现这个问题;除非您必须与非电话/Mac计算机共享数据库,否则使用CoreData有很多原因。