0

sqliteデータベースがすでに構築されており、アプリケーションの起動時にコピーされます。その後、もちろんクエリを実行します(ステートメントを選択するだけです)。これまでのところ、1つを除くすべてのクエリが機能します。調査の結果、スペースを含むcharNamesはどうやって「?」スペースがある場所に追加されました。つまり、「Helloworld」の代わりに「Hello?World」があります。なんらかの理由で、これにより私の文字列がnullに等しくなるようです。

NSString *querySQL = [NSString stringWithFormat: @"select moveName, moveCommand, moveStance, moveHits, moveType, moveDmg, moveHitRange, moveEscape, moveProperties from Moves where charName='%@' and moveCatagory = '%@';",charName, catName];
        
        NSLog(@"move SQL query: %@",querySQL);
        
        const char *query_stmt = [querySQL UTF8String];
        
        if (sqlite3_prepare_v2(myDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(statement) == SQLITE_ROW)
            {
                const char* moveName = (const char*)sqlite3_column_text(statement, 0);
                const char* moveCommand = (const char*)sqlite3_column_text(statement, 1);
                const char* moveStance = (const char*)sqlite3_column_text(statement, 2);
                const char* moveHits = (const char*)sqlite3_column_text(statement, 3);
                const char* moveType = (const char*)sqlite3_column_text(statement, 4);
                const char* moveDmg = (const char*)sqlite3_column_text(statement, 5);
                const char* moveHitRange = (const char*)sqlite3_column_text(statement, 6);
                const char* moveEscape = (const char*)sqlite3_column_text(statement, 7);
                const char* moveProperties = (const char*)sqlite3_column_text(statement, 8);
                
                Move * move = [[Move alloc]init];
                
                if (moveName != nil) {  
                    move.moveName = [[NSString alloc] initWithUTF8String:moveName]; 
                    NSLog(@"moveName %@",move.moveName);
                }

ETC...クエリされたフィールドごとにコピー

これは、moveNameを除くすべてのクエリフィールドで機能します。これらの移動行にはそれぞれタイトルフィールド(通常はスペースなし)があり、そのタイトルは毎回通過しますが、残りの行にはスペースがあり、それらはnullとして通過します。

コンソールからの出力:

2012-05-04 10:35:11.886私のムーブリスト[2938:f803] moveName Jab

2012-05-04 10:35:11.891 my Movelist [2938:f803] moveName(null)

2012-05-04 10:35:11.895 my Movelist [2938:f803] moveName(null)

ターミナルsqlite3からの出力:

ジャブ|1|||| 8 | h ||

フォワード?ジャブ| f + 1 |||| 8 | h ||

ダウン?ジャブ| d / b + 1 | RC ||| 6 | s ||

参考:簡単にするために、他のフィールドは正常に機能しているように見えるため、省略しました。私が言ったように、それは名前フィールドにのみあるように見えるスペースと関係があると思います。

4

1 に答える 1

0

あなたは悪いデータを見ています。? _ 実際には � または � ½であり、SQL で REPLACE 関数を使用して、意図した通常のスペースに置き換えることができるはずです。nullおそらくUTF8互換ではない文字の結果です。

詳細については、このリンクまたはこの投稿を参照してください。

于 2012-05-04T19:22:21.173 に答える