将va_list传递给FMDB executeUpdate函数时崩溃

时间:2014-03-21 15:30:40

标签: ios objective-c fmdb variadic-functions

我有一个接受va_list的方法,如下所示:

+(NSUInteger) addObjectToDB:(NSString*)dbFilePath withSQL:(NSString*)sql, ... {
    va_list args;
    va_start(args, sql);

    FMDatabaseQueue* dbQ = [FMDatabaseQueue databaseQueueWithPath:dbFilePath];
    __block NSUInteger result = -1;

    [dbQ inDatabase:^(FMDatabase *db) {
        [db open];

        if ([db executeUpdate:sql, args]) {
            result = (NSUInteger) [db lastInsertRowId];
        }

        [db close];
    }];

    va_end(args);

    return result;
}

EDIT1:

我想将va_list(args)传递给FMDatabase的'executeUpdate:'方法,如下所示:

NSString* sql = [NSString stringWithFormat:@"Insert Into Table_Name Values (NULL, '%@', ?, ?)", @"string"]; 
[CXDBHelper addObjectToDB:self.dbFilePath withSQL:sql, NSData, NSData];

但是执行在方法(FMDatabase.m)中停止了:

- (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {

    if ((!obj) || ((NSNull *)obj == [NSNull null])) {
        sqlite3_bind_null(pStmt, idx);
    }

    // FIXME - someday check the return codes on these binds.
    else if ([obj isKindOfClass:[NSData class]]) {

在最后一行没有错误消息。

编辑2:

感谢@ rmaddy的提示,我检查了代码executeUpdate:,它被定义为:

- (BOOL)executeUpdate:(NSString*)sql, ...

我意识到问题是我无法将va_list传递给它。

编辑3:

最后,我使用另一个接受va_list的方法:executeUpdate: withVAList:现在一切正常。

0 个答案:

没有答案