我有一个接受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;
}
我想将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]]) {
在最后一行没有错误消息。
感谢@ rmaddy的提示,我检查了代码executeUpdate:
,它被定义为:
- (BOOL)executeUpdate:(NSString*)sql, ...
我意识到问题是我无法将va_list传递给它。
最后,我使用另一个接受va_list的方法:executeUpdate: withVAList:
现在一切正常。