2011-11-27 86 views
1

我一直在试图弄清楚为什么Xcode中的分析器似乎喜欢这个代码,所以也许有人可以看到什么是错的。给我这个消息:“函数调用参数是一个未初始化的值”。函数调用参数是一个未初始化的值?

它有一个问题,这条线和抱怨的 “声明”:

if (sqlite3_exec(MysDB, delete_stmt, NULL, statement, NULL) == SQLITE_OK) { 

实际代码:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
if (buttonIndex == 1) { 
    sqlite3_stmt *statement; 
    const char *dbpath = [databasePath UTF8String]; 

    if (sqlite3_open(dbpath, &MyDB) == SQLITE_OK) 
    { 
     NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM DATATABLE WHERE ID = %d", recordID]; 

     const char *delete_stmt = [deleteSQL UTF8String]; 
     if (sqlite3_exec(MysDB, delete_stmt, NULL, statement, NULL) == SQLITE_OK) { 

      NSLog(@"Deleted");    
     }else{ 
      NSLog(@"Not Deleted"); 
     } 
     sqlite3_close(MyDB); 
    } 
} 

More Code Here Removed on Purpose... 
} 

回答

1

sqlite3_exec的第三个参数是回调函数,在您的示例中当前为NULL。第四个参数是这个回调的参数。

http://www.sqlite.org/c3ref/exec.html

所以,我认为它不喜欢的是你给的实际参数为NULL回调函数的事实。

+0

谢谢 - 固定它。我不相信我没有看到这一点。我看了几个小时。 – Jon

3

你不初始化sqlite3_stmt *statement;(下if (buttonIndex == 1) {右)于任何特定的价值,当你做到这一点。并且你在sqlite3_exec3()函数中使用它。

+0

谢谢你的回答。 Ushox的建议解决了这个问题。 – Jon

0

我想你可能在该行有一个错字。 sqlite3_execMysDB的第一个参数应该可能是MyDB

+0

我拿出了数据库的实际名称 - 这里并不重要。谢谢你的回答和帮助。 – Jon