我有一个正在制作的应用程序,它使用 aUIManagedDocument
来处理核心数据和 iCloud。在我的应用程序开始时,我打开文件并UIManagedDocument
使用 iCloud 目录初始化。
这在我第一次加载程序和随后的时间时工作正常,但据我了解,因为我使用 iCloud,我应该能够删除应用程序并重新加载它并让它从云中重新加载数据。
当我删除应用程序并重新加载它时,它能够获取 url 并初始化它,UIManagedDocument
但是一旦它到达[document openWithCompletionHandler:^(BOOL success){}]
应该访问文档的线程,就会返回 EXC_BAD_ACCESS。
这是我用来设置包含核心数据的文档的代码,iCloud url 很好。这是我第一次使用 iCloud。我究竟做错了什么?
- (void)setupDocument
{
NSURL *url = [self iCloudDocumentsDirectory];
url = [url URLByAppendingPathComponent:@"ZJournalData"];
UIManagedDocument *document = [[ZManagedDocument alloc] initWithFileURL:url];
NSLog(@"%@", document);
[document.persistentStoreOptions setValue:[document.fileURL lastPathComponent] forKey:NSPersistentStoreUbiquitousContentNameKey];
[document.persistentStoreOptions setValue:[[self iCloudDirectory] URLByAppendingPathComponent:@"CoreDataLogs"] forKey:NSPersistentStoreUbiquitousContentURLKey];
if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
[document saveToURL:url
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
} else if (document.documentState == UIDocumentStateClosed) {
[document openWithCompletionHandler:^(BOOL success) {
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
} else {
NSLog(@"%@", document);
self.managedObjectContext = document.managedObjectContext;
}
}