Jak debugować / obsługiwać sporadyczne błędy „odmowa autoryzacji” i „dyski we / wy” podczas dodawania magazynu SQL do NSPersistentStoreCoordinator?

Mam aplikację w sklepie z aplikacjami i korzystam z usługi rejestrowania, aby uzyskać dzienniki awarii i powiązane dane dziennika. Widzę sporadyczne awarie (liczba użytkowników, których dotyczy problem, i mała liczba awarii na użytkownika), ale jest to dla mnie zaskakujące.

To, co dzieje się w tych awariach, jest następujące:

Aplikacja uruchamia i inicjalizuje stos danych podstawowych

Aplikacja próbuje dodać magazyn SQL do NSPersistentStoreCoordinator za pomocą następującego kodu (storeURL jest ważny):

NSDictionary *options = @{
    NSMigratePersistentStoresAutomaticallyOption : @(YES),
    NSInferMappingModelAutomaticallyOption : @(YES)
};

sqlStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                     configuration:nil
                                                               URL:storeURL
                                                           options:options
                                                         error:&error];

Jeden z następujących błędów występuje podczas dodawania tego sklepu:

NSError:

Domena = NSCocoaErrorDomain
Kod = 256 "Nie można ukończyć operacji. (Błąd kakao 256.)"
UserInfo = 0x1dd946a0 {NSUnderlyingException = odmowa autoryzacji, NSSQLiteErrorDomain = 23}

lub

NSError:

Domena = NSCocoaErrorDomain
Kod = 256 "Nie można ukończyć operacji. (Błąd kakao 256.)"
UserInfo = 0xc6525d0 {NSUnderlyingException = błąd we / wy dysku, NSSQLiteErrorDomain = 10}

Po tym warunku aplikacja ulegnie awarii b / c sklep SQL jest wymagany do działania aplikacji. Mógłbym spróbować z wdziękiem obsłużyć tę awarię, próbując nowego storeURL, ale nie chcę, aby użytkownik utracił istniejące dane. Nigdy też osobiście nie odtworzyłem tego problemu i na podstawie małej liczby użytkowników, których dotyczy problem, i dzienników awarii uważam, że jest to problem o niewielkim wpływie i nie powtarza się przy kolejnym uruchomieniu aplikacji.

Mam nadzieję, że istnieje guru Core Data z kilkoma sugestiami, jak debugować i zapobiegać / radzić sobie z tymi warunkami. Mój podstawowy kod inicjujący stos danych pochodzi bezpośrednio z generatora projektu xcode i wykluczyłem wszelkie problemy z współbieżnością, ponieważ koordynator trwałego sklepu jest inicjalizowany tylko raz (przy uruchomieniu) i ten błąd występuje w tej inicjalizacji.

Z przyjemnością dostarczę więcej kodu / informacji, jeśli to konieczne.

dzięki!

questionAnswers(4)

yourAnswerToTheQuestion