2015-12-12 14 views
5

Używam CKModifyRecordsOperation do zapisywania zestawu rekordów, a jeśli mam połączenie internetowe, wszystko działa dobrze i jest wywoływany blok zakończenia. Ale gdy nie mam połączenia, blok zakończenia nie jest wywoływany i nie otrzymuję informacji, że moje operacje zawiodły.CKModifyRecordsOperation modifyRecordsCompletionBlock nie jest wywoływany

Używam następujący kod w bloku zakończenia

modifyOperations.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error) 
{ 
    if(error){ 
     NSLog(@"Error: %@", error.localizedDescription); 
    } 

    item.creatorRecordId = record.recordID; 
}; 

a potem mam wykonywania operacji przy użyciu

[self.publicDB addOperation:modifyOperations]; 

pomysłów w jaki sposób mogę uzyskać informację, czy operacja nie powiodła się na przykład w przypadku, gdy nie ma połączenia z Internetem?

+1

Zajmuję się tym ostatnio. Jeśli nie ma Internetu, operacja nie zawiedzie. Po prostu czeka. Po powrocie połączenia z Internetem operacja zostanie zakończona. Jedną z opcji (którą zaimplementowałem) było sprawdzenie dostępności przed dodaniem operacji do bazy danych. – rmaddy

+0

Tak, też o tym myślałem. Ale może wystąpić problem z tym rozwiązaniem, jeśli połączenie spadnie zaraz po sprawdzeniu osiągalności i przed wykonaniem operacji ... Zastanawiam się nad wprowadzeniem timera, a następnie po pewnym czasie sprawdź, czy osiągalna jest, jeśli operacja nie zostanie uruchomiona. Ale znowu pojawia się pytanie, jaki powinien być ten czas. – Wojtek

Odpowiedz

6

Domyślnie, operacje w CloudKit mają domyślnie ustawioną właściwość qualityOfService na NSQualityOfServiceUtility.

Operacje, które używają NSQualityOfServiceUtility lub NSQualityOfServiceBackground mogą być oznaczone jako discretionary network requests. System może przechowywać dowolne żądania sieciowe, jeśli łączność sieciowa jest słaba, więc możesz nie otrzymać odpowiedzi od serwera, dopóki warunki się nie poprawią, a system wyśle ​​żądanie.

Jeśli chcesz, aby Twoje żądanie zostało wysłane we wszystkich przypadkach, ustaw CKOperation.qualityOfService na NSQualityOfServiceUserInitiated lub NSQualityOfServiceUserInteractive.

Powiązane problemy