我有一个应用程序,它几乎遵循此处描述的方法。关键代码如下:
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface FailedBankDatabase : NSObject {
sqlite3 *_database;
}
+ (FailedBankDatabase*)database;
- (NSArray *)failedBankInfos;
@end
#import "FailedBankDatabase.h"
#import "FailedBankInfo.h"
@implementation FailedBankDatabase
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;
}
- (void)dealloc {
sqlite3_close(_database);
[super dealloc];
}
现在,该应用程序可以按预期使用一个数据库。但是,我希望能够在用户触摸按钮时切换到不同的数据库。我有按钮处理程序和逻辑 OK,我存储要使用的数据库的名称并可以检索它。但是,无论我做什么,我总是得到相同的(原始)数据库被调用。我担心示例中_database
与 类型的对象关联的句柄sqlite3
没有正确更改,因此我没有正确打开数据库。我应该如何去改变这个?您不能重新初始化单例,但我需要更改其中存储的内容,在这种情况下_database
。谢谢。
编辑:我会补充说,如果我要求_database
是一个指针。所以我需要打开一个新数据库(并关闭我猜的第一个)并在此过程中为新数据库提供一个新地址。