2011-11-08 34 views
5

我在我的應用程序中使用iCloud加載文本文件。當加載文本文件,這種方法是通過iCloud的稱爲當我打電話_UIDocument openWithCompletionHandler:^(BOOL success)等:iCloud的loadFromContents - 如何處理UIDocumentStateSavingError和UIDocumentStateEditingDisabled

-(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,我試圖返回NO,即如果它是8或12,但是這導致根本不加載任何內容。

我想問題是UIDocument不會將任何東西加載到self.books中,如果它的編輯被禁用或存在保存錯誤。

什麼將是一個很好的做法來處理這種錯誤?另外,爲什麼Apple沒有在他們的示例代碼中建議在將數據加載到UIDocument(iCloud Docs)之前檢查documentState?我想我正在做一些根本性錯誤的事情。

回答

4

您是否實施了衝突管理?

在這些情況下,你應該嘗試一些事情,然後重新嘗試加載該文件的第一個是檢查是否

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

有任何衝突,解決這些問題,重試打開文件,

[的NSFileManager evictUbiquitousItemAtURL:]

[的NSFileManager startDownloadingUbiquitousItemAtURL:]

如果仍然無法打開它,它下載後重試。

相關問題