gpt4 book ai didi

ios - 使用 SQLite3 隐式转换为 Objective-C 指针

转载 作者:行者123 更新时间:2023-11-28 21:32:59 24 4
gpt4 key购买 nike

我遵循使用 MRC 的旧教程,当我粘贴代码时出现错误:Implicit conversion to an Objective-C pointer using SQLite3 on a line:

if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) {

完整的代码片段是:

static FailedBankDatabase *_database;

+ (FailedBankDatabase*)database {
if (_database == nil) {
_database = [[FailedBankDatabase alloc] init];
}
return _database;
}

- (id)init {
if ((self = [super init])) {
NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"banklist"
ofType:@"sqlite3"];

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

我不太喜欢 MRC,你能帮我解决一下吗?

最佳答案

_database 变量是您对 FailedBankDatabase 单例的静态引用。但是您还试图用它来保存 SQLite 数据库引用。为此,您需要一个 sqlite3 * 类型的实例变量。

将您的代码更新为如下所示:

@implementation FailedBankDatabase {
sqlite3 *_db;
}

+ (FailedBankDatabase*)database {
static FailedBankDatabase *database = nil;

if (database == nil) {
database = [[FailedBankDatabase alloc] init];
}
return database;
}

- (id)init {
if ((self = [super init])) {
NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"banklist"
ofType:@"sqlite3"];

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

现在对各种 sqlite3_... 函数调用中的所有数据库引用使用 _db 变量。

仅供引用 - 您应该使用更现代的方法来创建单例:

+ (FailedBankDatabase*)database {
static FailedBankDatabase *database = nil;
static dispatch_once_t predicate = 0;

dispatch_once(&predicate, ^{
database = [[FailedBankDatabase alloc] init];
});

return database;
}

关于ios - 使用 SQLite3 隐式转换为 Objective-C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com