1

「呼び出された型 NSString は関数でも関数ポインタでもありません。何日も試行錯誤してきました。問題がどこにあるのかわかりませんか?」というエラーが表示され続けます。

- (void)saveData
{

    sqlite3_stmt    *statement;
    const char *dbpath = [databasePath UTF8String];

    if (sqlite3_open(dbpath, &testdb1) == SQLITE_OK)
    {


        NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO TESTDB1"
                               (email, username, password, age) VALUES (\"%@\", \"%@\", \"%@\", \"%@\")",
                                email.text, username.text, password.text, age.integer];


        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(testdb1, insert_stmt, -1, &statement, NULL);

        if (sqlite3_step(statement) == SQLITE_DONE)
        {
           status.text = @"User added";
           email.text = @"";
           username.text = @"";
           password.text = @"";
           age.text = @"";
        } else {
           status.text = @"Failed to add user";
        }
          sqlite3_finalize(statement);
          sqlite3_close(testdb1);
    }

}
4

2 に答える 2

2
NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO TESTDB1"
                   (email, username, password, age)

引用符を閉じるのが早すぎます。表情をよく見るとわかる

@"INSERT INTO TESTDB" (email, username, password, age)

したがって、コンパイラは、NSString を関数として呼び出そうとしていることを認識します。フォーマット文字列リテラルを次のように変更します

NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO TESTDB1 (email, username, password, age) VALUES (\"%@\", \"%@\", \"%@\", \"%@\")",
                    email.text, username.text, password.text, age.integer];

大丈夫です。

P. s .:質問を投稿する前にプレビューを見てください。

于 2012-10-06T16:47:30.650 に答える
1

stringWithFormat 呼び出しの 2 行目の先頭に引用符がありません。

于 2012-10-06T16:48:22.593 に答える