私が作成しているアプリがあり、UIManagedDocument
コア データと 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;
}
}