ここで説明する方法にほぼ従うアプリがあります。キーコードは次のとおりです。
#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];
}
これで、アプリは期待どおりに1つのデータベースで動作します。しかし、ユーザーがボタンに触れたときに別のデータベースに切り替えられるようにしたいと思います。ボタンハンドラーとロジックはOKで、使用するデータベースの名前を保存して取得できます。しかし、私が何をしても、常に同じ(元の)データベースが呼び出されます。_database
この例では、タイプのオブジェクトに関連付けられているハンドルsqlite3
が適切に変更されていないので、データベースを適切に開かないのではないかと心配しています。これをどのように変更すればよいですか?シングルトンを再初期化することはできませんが、この場合は、シングルトンに格納されているものを変更する必要があり_database
ます。ありがとう。
編集:私が求めるなら、私はそれを追加し_database
ます。したがって、新しいデータベースを開いて(そして最初に推測したものを閉じて)、その過程で新しいデータベースに新しいアドレスを指定する必要があります。