Objective c 线程1:程序接收信号;SIGBRT";

Objective c 线程1:程序接收信号;SIGBRT";,objective-c,ios5,sqlite,xcode4.2,Objective C,Ios5,Sqlite,Xcode4.2,我正在iOS5上开发sqlite数据库。我的应用程序所做的是在文本字段中获取字符串并将其保存到数据库中。当我运行应用程序时,它崩溃并发出以下警告: 线程1:程序接收信号“SIGBRT” 它在main.m中给出了这一点,这一行: return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 有人能帮我吗?非常感谢(我使用的是xcode 4.2 以下是编译器表示发生断言失败的方法 - (void

我正在iOS5上开发sqlite数据库。我的应用程序所做的是在文本字段中获取字符串并将其保存到数据库中。当我运行应用程序时,它崩溃并发出以下警告:

线程1:程序接收信号“SIGBRT”

它在main.m中给出了这一点,这一行:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
有人能帮我吗?非常感谢(我使用的是xcode 4.2

以下是编译器表示发生断言失败的方法

- (void) addstrings{    
    if(addStmt == nil) {
    const char *sql = "insert into strings(strings) Values(?)";
    if(sqlite3_prepare_v2(database, sql, -1, &addStmt, NULL) != SQLITE_OK)
        NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database));
    }

    sqlite3_bind_text(addStmt, 1, [strings UTF8String], -1, SQLITE_TRANSIENT);

    if(SQLITE_DONE != sqlite3_step(addStmt))
        NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database));
    else
        //SQLite provides a method to get the last primary key inserted by using sqlite3_last_insert_rowid
        strID = sqlite3_last_insert_rowid(database);

    //Reset the add statement.
    sqlite3_reset(addStmt);
}

在没有更多信息的情况下,不可能准确地说出程序中发生了什么,但是调用abort()最常见的原因是:

  • 向不支持/实现该消息的Objective-C对象发送消息。这将导致可怕的“无法识别的选择器发送到实例”错误
  • 在定义宏NDEBUG的非调试版本中,标准库宏assert(3)在断言失败时调用abort()
  • 您有一些内存踩踏/分配错误。当malloc/free检测到损坏的堆时,可能会调用abort()。 这意味着:您正在释放已经完成的内存,可能是向对象发送了太多的释放消息。另一件事是,您可能无法将对象连接到nib中的IBOutlet。我真的不知道,因为除了报告的错误之外,您没有提供任何其他信息

  • < p>您抛出了一个未被排除的异常(C++异常或ObjeO-C异常)。


    几乎在所有情况下,调试控制台都会为您提供有关调用abort()的原因的更多信息,因此请务必查看那里。

    SIGABRT
    错误可能在各种情况下发生

    就像您试图在不打开
    DB
    的情况下关闭
    DB
    ,或者试图在不打开
    DB
    的情况下向
    DB
    写入一些值一样


    或者可能有几个原因,所以在这里发布一些代码。

    通过“将其保存到数据库”,你是指直接调用SQLite,还是使用CoreData?在这两种情况下,在保存点附近查看相关代码都会有所帮助。我使用的是SQLite 3@wadesworld。我已经检查了很多次代码,但没有任何线索:(你能给问题添加堆栈跟踪吗?调试控制台告诉我断言失败了。你能告诉我在这种情况下可能出了什么问题吗?另外,我使用的是ARC启用,所以我没有使用任何explicite版本或delloc等。你能指导我吗?请再次查看问题。我已经编辑了它并做了一些更改。我编辑了。)编辑了问题并添加了编译器发现错误的方法的代码。请指导我问题所在。谢谢。
    const char*sql=“插入字符串(字符串)值(?);
    什么值将代替
    (?)
    在哪里得到断言失败?在创建add语句或插入数据时?代替(?),文本字段中字符串的值将被保存。执行
    NSLog(“sql查询=%@”,sql)
    并复制此查询并将其放入sqlite中,然后检查其是否工作?