Xcode 找不到SQLITE语句调用的错误

Xcode 找不到SQLITE语句调用的错误,xcode,sqlite,Xcode,Sqlite,我在查找错误时遇到问题。代码通过了ID(init),我知道数据库正在加载。我的问题是IF(sqlite3\u prepare\u v2…)语句。当我运行代码时,这一行不==SQLITE_OK,它跳到末尾。感谢您的帮助。谢谢 @implementation CityState static CityState *WDdatabase; +(CityState *)WDdatabase { if(WDdatabase == nil) { WDdatabase = [[C

我在查找错误时遇到问题。代码通过了ID(init),我知道数据库正在加载。我的问题是IF(sqlite3\u prepare\u v2…)语句。当我运行代码时,这一行不==SQLITE_OK,它跳到末尾。感谢您的帮助。谢谢

@implementation CityState

static CityState *WDdatabase;

+(CityState *)WDdatabase {
    if(WDdatabase == nil) {

        WDdatabase = [[CityState alloc] init];
    }
    return WDdatabase;
}



- (id)init {
    self = [super init];
    if (self) {
        NSString *sqliteDB = [[NSBundle mainBundle] pathForResource:@"CityAndState" ofType:@"sqlite"];

        if(sqlite3_open([sqliteDB UTF8String], &WDdatebase) != SQLITE_OK){
            NSLog(@"Failed to open database");
        }
    }
    return self;
}


-(NSArray *)getAllCities {
    NSMutableArray *returnArray = [[NSMutableArray alloc] init];
    NSString *query = @"SELECT * FROM Test_Table";

    sqlite3_stmt *statement;

    if(sqlite3_prepare_v2(WDdatebase, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
       }
        sqlite3_finalize(statement);
    }

    return returnArray;
}

据我所知,Objective-C不会像您尝试的那样处理静态类变量,而符号
WDatabase
(我假设输入错误就在这里,而不是在您的代码中)实际上是一个类标识符,而不是静态变量。要实现单例,需要一个文件范围变量(在@implementation块之外)(我建议您将其命名为下划线,以明确何时访问该对象以及何时访问类方法。因此,基本上,您失败的调用可能是因为您传递的是类对象而不是变量。一旦您正确设置了静态变量

访问“类变量”(由于Objective-C的C灵魂,它最终只是一个文件范围/静态存储的变量)的正确语法是向类对象发送消息:

sqlite3_prepare_v2([CityState wDdatebase], [query UTF8String], ...
更进一步,只是为了学究;如果您不使用NSString的任何功能,只需要UTF8(或“C风格”)字符串,您可以像在C中一样使用它们:

-(NSArray *)getAllCities {
    NSMutableArray *returnArray = [[NSMutableArray alloc] init];
    char query[] = "SELECT * FROM Test_Table";

    sqlite3_stmt *statement;

    if(sqlite3_prepare_v2([CityState wDdatebase], query, -1, &statement, NULL) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
       }
        sqlite3_finalize(statement);
    }

    return returnArray;
}