5
我已经看过How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks?但我真的不明白。如何在不同的对象之间共享一个UIManagedDocument?
我想实现的是应该只有一个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;
}
你单身方法看起来像的路要走。你可以移动dispatch_once中的url创建代码来优化它。 – Felix 2012-02-24 19:04:07
很好,谢谢你,在信贷到期时给予信贷:Colin Wheeler是我的灵感 - http://stackoverflow.com/a/2200751/1096476 – uem 2012-02-24 19:37:17