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