私は既にHow do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks?を見てきましたが、実際には得られません。異なるオブジェクト間で1つのUIManagedDocumentをどのように共有できますか?
私が達成したいのは、アプリケーション全体のために、コアデータデータベースであるUIManagedDocumentが1つだけであることです。異なるオブジェクトはメソッドを呼び出して、唯一の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クラス参照をチェックしましたが、それを見つけることができませんでした。
お願いします。 事前に感謝します。私が思っていた
EDIT ...のようなシングルトン方法について何:あなたは、ディスク上の既存UIManagedDocumentsを持っている場合は
+ (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;
}
あなたのシングルトンの方法は、進むべき道のように見えます。あなたはそれを最適化するために、dispatch_onceの中でURL作成コードを移動することができます。 – Felix
コリン・ウィーラーが私のインスピレーションを受けてくれたことを信じて、ありがとうございました。 - http://stackoverflow.com/a/2200751/1096476 – uem