2011-11-08 18 views
5

Tôi đang sử dụng iCloud trong ứng dụng của mình để tải các tệp văn bản. Khi tải tập tin văn bản, phương pháp này được gọi bởi iCloud khi tôi gọi _UIDocument openWithCompletionHandler:^(BOOL success) vv:loadFromContents của iCloud - cách xử lý 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; 
} 

Bây giờ vấn đề lớn đặt ra là khi documentState là 8 (UIDocumentStateEditingDisabled) hoặc 12 (UIDocumentStateSavingError & UIDocumentStateEditingDisabled). Điều này thường sẽ dẫn đến sự cố của ứng dụng. Tôi đã cố gắng trả về NO nếu documentState là> 7, tức là nếu nó là 8 hoặc 12 nhưng điều này dẫn đến việc không tải bất kỳ nội dung nào cả.

Tôi đoán vấn đề là UIDocument sẽ không tải bất kỳ thứ gì vào self.books nếu chỉnh sửa bị tắt hoặc nếu có lỗi lưu.

Thực tiễn tốt để xử lý các lỗi như vậy là gì? Ngoài ra, tại sao Apple không đề xuất trong mã mẫu của họ để kiểm tra documentState trước khi tải dữ liệu vào UIDocument (iCloud Docs)? Tôi đoán rằng tôi đang làm một cái gì đó về cơ bản sai.

Trả lời

4

Bạn đã thực hiện quản lý xung đột chưa?

Trong những tình huống bạn nên cố gắng một số điều sau đó thử lại load file đầu tiên là để kiểm tra xem

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

có bất kỳ xung đột, giải quyết chúng, thử lại mở tệp,

[NSFileManager evictUbiquitousItemAtURL:]

[NSFileManager startDownloadingUbiquitousItemAtURL:]

nếu vẫn không thể mở nó, thử lại một lần nữa sau khi tải về.

Các vấn đề liên quan