ブロックを使用してアプリケーション全体で共有されるディスク上のドキュメントごとにグローバル UIManagedDocument インスタンスを作成するにはどうすればよいですか? しかし、私は本当にそれを理解していません。
私が達成したいのは、アプリ全体に対して 1 つの UIManagedDocument (コア データ データベース) のみが存在することです。異なるオブジェクトがメソッドを呼び出して、唯一の UIManagedDocument を取得する必要があります。
クラス メソッドでヘルパー クラスを使用します。
+ (UIManagedDocument *)getsharedDatabase:(NSString *)databaseName
{
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:databaseName];
// url is now "<Documents Directory>/<databaseName>"
if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]])
{
// does not exist on disk, so create one
UIManagedDocument *managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];
return managedDocument;
}
else
{
UIManagedDocument *managedDocument = **?????**
return managedDocument;
}
}
疑問符でわかるように、既存のファイルを取得する方法がわかりません。UIManagedDocument クラス リファレンスを確認しましたが、見つかりませんでした。
助けてくれませんか?よろしくお願いします。
編集 私は疑問に思っていました...次のようなシングルトンメソッドはどうですか:
+ (UIManagedDocument *) sharedDatabase
{
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"databaseName"];
// url is now "<Documents Directory>/databaseName"
static UIManagedDocument *managedDocument = nil;
static dispatch_once_t mngddoc;
dispatch_once(&mngddoc, ^{
managedDocument = [[UIManagedDocument alloc] initWithFileURL:url];
});
return managedDocument;
}