Pertanyaan LoadFromContents iCloud - bagaimana menangani UIDocumentStateSavingError & UIDocumentStateEditingDisabled


Saya menggunakan iCloud di aplikasi saya untuk memuat file teks. Saat memuat file teks, metode ini disebut oleh iCloud saat saya menelepon _UIDocument openWithCompletionHandler:^(BOOL success) dll:

    -(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;
}

Sekarang masalah besar adalah ketika documentState adalah 8 (UIDocumentStateEditingDisabled) atau 12 (UIDocumentStateSavingError & UIDocumentStateEditingDisabled). Ini biasanya akan menyebabkan jatuhnya aplikasi. Saya mencoba mengembalikan NO jika documentState> 7, mis. Apakah itu 8 atau 12 tetapi ini tidak memuat konten sama sekali.

Saya kira masalahnya adalah bahwa UIDocument tidak akan memuat apa pun ke self.books jika pengeditan dinonaktifkan atau jika ada kesalahan penyimpanan.

Apa yang akan menjadi praktik yang baik untuk menangani kesalahan seperti itu? Juga, mengapa Apple tidak menyarankan dalam kode contoh mereka untuk memeriksa documentState sebelum memuat data ke UIDocument (iCloud Docs)? Saya kira saya melakukan sesuatu yang salah secara mendasar.


5
2017-11-08 21:00


asal


Jawaban:


Apakah Anda menerapkan manajemen konflik?

Dalam skenario tersebut Anda harus mencoba beberapa hal kemudian coba memuat file yang pertama untuk memeriksa apakah

[NSFileVersion unresolvedConflictVersionsOfItemAtURL:]

memiliki konflik apa pun, mengatasinya, mencoba membuka file,

[NSFileManager evictUbiquitousItemAtURL:]

dan

[NSFileManager startDownloadingUbiquitousItemAtURL:]

jika masih tidak bisa membukanya, coba lagi setelah diunduh.


4
2018-02-29 16:07