我在我的应用中使用iCloud加载文本文件。加载文本文件时,当我调用_UIDocument openWithCompletionHandler:^(BOOL success)
等时,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是>我试图返回NO。 7,即如果是8或12,但这导致根本不加载任何内容。
我想问题是,如果禁用编辑或存在保存错误,UIDocument将不会将任何内容加载到self.books中。
处理此类错误的良好做法是什么?另外,为什么Apple在他们的示例代码中没有建议在将数据加载到UIDocument(iCloud Docs)之前检查documentState?我想我正在做一些根本错误的事情。
答案 0 :(得分:4)
您是否实施了冲突管理?
在这些情况下,你应该尝试一些事情然后重试加载文件,第一个是检查是否
[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]
有任何冲突,解决它们,重试打开文件,
[NSFileManager evictUbiquitousItemAtURL:]
和
[NSFileManager startDownloadingUbiquitousItemAtURL:]
如果仍然无法打开它,请在下载后再次重试。