アプリで iCloud を使用してテキスト ファイルをロードしています。テキストファイルをロードするとき、_UIDocument openWithCompletionHandler:^(BOOL success)
etcを呼び出すと、iCloud によってこのメソッドが呼び出されます。
-(BOOL)loadFromContents:(id)contents ofType:(NSString *)typeName error:(NSError **)outError {
NSLog(@"Library loadFromContents: state = %d", self.documentState);
if (!_books) {
_books = [[NSMutableArray alloc] init];
}
//if (self.documentState > 7) {
// NSLog(@"document is either savingError (4), EditingDisabled (8) or both (12)... will not load");
// return NO;
//}
self.books = [NSKeyedUnarchiver unarchiveObjectWithData:contents];
if ([_delegate respondsToSelector:@selector(libraryDocumentUpdated:)]) {
[_delegate libraryDocumentUpdated:self];
}
return YES;
}
大きな問題は、documentState が 8 (UIDocumentStateEditingDisabled) または 12 (UIDocumentStateSavingError & UIDocumentStateEditingDisabled) の場合です。これは通常、アプリのクラッシュにつながります。documentState が > 7 の場合、つまり 8 または 12 の場合は NO を返そうとしましたが、コンテンツがまったく読み込まれません。
問題は、編集が無効になっている場合、または保存エラーが発生した場合、 UIDocument が self.books に何も読み込まないことだと思います。
このようなエラーを処理するための良い方法は何ですか? また、Apple がサンプル コードで、データを UIDocument ( iCloud Docs ) にロードする前に documentState をチェックすることを提案しなかったのはなぜですか? 私は根本的に間違ったことをしていると思います。