我已经建立了我的 sqlite 数据库,并在应用程序启动时复制。之后我当然会运行查询(只是选择语句)。到目前为止,除了一个查询之外的所有查询都有效。经过一番调查,似乎带有空格的 charNames 是如何得到“?”的。在空格所在的位置添加。所以我有“Hello?World”而不是“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);
}
等...为每个查询的字段复制
这将适用于除了 moveName 之外的所有查询字段。这些移动行中的每一个都有一个标题字段(通常没有空格),并且该标题每次都出现,但其余行有空格并且那些作为空值出现。
控制台输出:
2012-05-04 10:35:11.886 我的 Movelist [2938:f803] moveName Jab
2012-05-04 10:35:11.891 我的 Movelist [2938:f803] moveName (null)
2012-05-04 10:35:11.895 我的 Movelist [2938:f803] moveName (null)
终端 sqlite3 的输出:
刺|1||||8|h||
前锋?Jab|f+1||||8|h||
向下?Jab|d/b+1|RC|||6|s||
仅供参考:为简单起见,我省略了其他字段,因为它们似乎工作正常。就像我说的,我认为这与似乎只在名称字段中的空格有关。