【问题标题】:Function call argument is an uninitialized value?函数调用参数是未初始化的值?
【发布时间】:2012-01-07 03:22:40
【问题描述】:

我一直在试图弄清楚为什么 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...
}

【问题讨论】:

    标签: iphone objective-c xcode ipad sqlite


    【解决方案1】:

    您在创建时不会将sqlite3_stmt *statement;(在if (buttonIndex == 1) { 正下方)初始化为任何特定值。然后在 sqlite3_exec3() 函数中使用它。

    【讨论】:

    • 感谢您的回答。 Ushox 的建议解决了这个问题。
    【解决方案2】:

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

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

    所以,我认为它不喜欢您将实际参数提供给 NULL 回调函数的事实。

    【讨论】:

    • 谢谢 - 这解决了它。我不敢相信我没有看到这一点。我看了好几个小时。
    【解决方案3】:

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

    【讨论】:

    • 我取出了数据库的实际名称——这里并不重要。感谢您的回答和帮助。
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2012-06-27
    • 2021-11-27
    相关资源
    最近更新 更多