sqlite for ios中select prepare语句崩溃

sqlite for ios中select prepare语句崩溃,ios,objective-c,sqlite,prepared-statement,Ios,Objective C,Sqlite,Prepared Statement,我正在尝试从本地数据库中获取特定记录。为此,我写了下面的代码 - (NSArray *)selectFromActivityTableWithActivityId:(NSString *)activityId { @synchronized(self) { sqlite3_stmt *statement; sqlite3 *database = nil; NSMutableArray *arr = [[NSMutableArray

我正在尝试从本地数据库中获取特定记录。为此,我写了下面的代码

- (NSArray *)selectFromActivityTableWithActivityId:(NSString *)activityId
{
    @synchronized(self)
    {
        sqlite3_stmt *statement;
        sqlite3 *database = nil;
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        const char *dbpath = [databasePath UTF8String];
        if (sqlite3_open(dbpath, &database) != SQLITE_OK)
        {

        }
        else
        {

            if (sqlite3_prepare_v2(database, "select * from activity_master where activityId=?", -1, &statement, nil) != SQLITE_OK)
            {
                NSLog(@"error in preparing select:%s",sqlite3_errmsg(database));
            }
            activityId = [NSString stringWithFormat:@"%lld",[activityId longLongValue]];
            if (sqlite3_bind_text(statement, 1, activityId.UTF8String, -1, SQLITE_TRANSIENT) != SQLITE_OK)
            {
                NSLog(@"error in binding..%d",sqlite3_errcode(database));
            }
            while (sqlite3_step(statement) == SQLITE_ROW)
            {
                int record_id = sqlite3_column_int(statement, 0);
                int someValue1 = sqlite3_column_int(statement, 1);
                NSString *someValue2 = [NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 2)];
                int activityId = sqlite3_column_int(statement, 3);
                double someValue3 = sqlite3_column_double(statement, 4);


                NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInt:record_id], @"id", [NSNumber numberWithInt:someValue1], @"someKey1", someValue2, @"someKey2", [NSNumber numberWithInt:activityId], @"activityId", [NSNumber numberWithDouble:someValue3], @"someKey3", nil];

                [arr addObject:dict];
            }
            if (sqlite3_finalize(statement) != SQLITE_OK)
            {
                NSLog(@"error in finalizing statement:%s",sqlite3_errmsg(database));
            }
            if (sqlite3_close(database) != SQLITE_OK)
            {}
            else
            {}
        }
        statement = nil;

        return arr;
    }
}
在这段代码中,我在
if(sqlite3\u prepare\u v2(数据库,“select*from activity\u master,其中activityId=?”,-1,&statement,nil)!=SQLITE\u OK)

不总是这样,但是在这个语句上有一些时间例外。 我不知道是什么造成了异常。
这是crashlytics上崩溃报告的屏幕截图。
请帮助解决此问题。

提前感谢。

感谢您为例外情况保密。但原因很可能是应用程序的其他部分损坏了一些内存。正如我所说的,我不会每次都收到异常,否则我也会在这里发布异常。我真的很想从今天早上开始得到那个异常,但没有得到,只是从crashlytics那里得到了崩溃报告。什么样的异常?必须有一些解释。我记得在2-3个月之前,得到同样的异常是
exc\u bad\u access
。但是,在使用xcode进行连接和调试时,这一次不会发生。