私は最初のiCloudアプリに取り組んでいます。しばらく作業した後、「UIDocumentStateSavingError」が原因で、アプリはUIManagedDocumentにアクセスできなくなります。発生したエラーを実際に確認する方法はありますか?
これは、UIManagedDocumentを作成するための私のコードです。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (iCloudURL == nil) {
dispatch_async(dispatch_get_main_queue(), ^{
[self iCloudNotAvailable];
});
return;
}
iCloudDocumentsURL = [iCloudURL URLByAppendingPathComponent:@"Documents"];
iCloudCoreDataLogFilesURL = [iCloudURL URLByAppendingPathComponent:@"TransactionLogs"];
NSURL *url = [iCloudDocumentsURL URLByAppendingPathComponent:@"CloudDatabase"];
iCloudDatabaseDocument = [[UIManagedDocument alloc] initWithFileURL:url];
NSMutableDictionary *options = [NSMutableDictionary dictionary];
NSString *name = [iCloudDatabaseDocument.fileURL lastPathComponent];
[options setObject:name forKey:NSPersistentStoreUbiquitousContentNameKey];
[options setObject:iCloudCoreDataLogFilesURL forKey:NSPersistentStoreUbiquitousContentURLKey];
iCloudDatabaseDocument.persistentStoreOptions = options;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentContentsChanged:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:iCloudDatabaseDocument.managedObjectContext.persistentStoreCoordinator];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentStateChanged:) name:UIDocumentStateChangedNotification object:iCloudDatabaseDocument];
if ([[NSFileManager defaultManager] fileExistsAtPath:[iCloudDatabaseDocument.fileURL path]]) {
// This is true, the document exists.
if (iCloudDatabaseDocument.documentState == UIDocumentStateClosed) {
[iCloudDatabaseDocument openWithCompletionHandler:^(BOOL success) {
if (success) {
dispatch_async(dispatch_get_main_queue(), ^{
[self documentConnectionIsReady];
});
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[self connectionError:iCloudConnectionErrorFailedToOpen];
});
}
}];
} else if (iCloudDatabaseDocument.documentState == UIDocumentStateNormal) {
...
}
} else {
...
}
});
ドキュメントはすでに存在するため、openWithCompletionHandler:がドキュメントで呼び出されます。これは失敗し、UIDocumentStateChangedNotificationが発生して、5のドキュメント状態が表示されます:UIDocumentStateClosedおよびUIDocumentStateSavingError
この後、完了ブロックが呼び出されます。ここから先に進む正しい方法は何ですか?何がうまくいかず、どのようなエラーが発生したかを知る方法はありますか?
完了ブロックでドキュメントを再度開こうとしましたが、結果は同じです。
ファイルを削除して再作成するだけで問題は解決できると思います。しかし、アプリがストアに出たら、これは明らかにオプションではありません。何が問題になっているのかを知り、ユーザーに問題を処理するための適切な方法を提供したいと思います。
UIDocumentStateSavingErrorを処理する他の質問(多くはありません)をここですでに確認しましたが、ここでの問題には当てはまらないようです。
問題が何であるかをどのように見つけることができるか考えていますか?APIが「保存中に問題が発生しましたが、何を教えません!」と言っているとは信じられません。