我有一个应用程序,几乎遵循here描述的方法。关键代码如下:如何更改存储在单例中的SQL数据库?
#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];
}
现在,该应用程序与预期的一个数据库一起工作。但是,当用户触摸按钮时,我希望能够切换到不同的数据库。我有按钮处理程序和逻辑确定,并存储要使用的数据库的名称,并可以检索它。但是,无论我做什么,我都会得到相同的(原始)数据库。我担心在示例中与_database
(sqlite3
类型的对象)关联的句柄没有正确更改,因此我没有正确打开数据库。我应该如何改变这一点?你不能重新初始化一个单身人士,但我需要改变存储在其中的东西,在这种情况下,_database
。谢谢。
编辑:我会补充说,如果我要求_database
是一个指针。所以我需要打开一个新的数据库(并关闭我猜的第一个数据库),并为这个新数据库提供一个新的地址。
谢谢您的回答@darksider我实现我自己的答案(见下文/以上),但随后发现,我的数据库是如此之大,该应用程序是iOS5的下难以忍受的慢,确定在iOS6下。所以我可能不得不去解决你的问题,尽管我也在考虑CoreData。非常感激。 –