2011-11-27 45 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