Więcej danych iCloud Core synchronizuje nieszczęścia

Tak się w końcu stało. Nastąpił najgorszy scenariusz dla dowolnego niezależnego programisty iPhone'a. Kilku użytkowników zgłasza zakończenieutrata danych po aktualizacji mojej aplikacji. Synchronizacja danych iCloud Core nie działa. Moi użytkownicy używają tej aplikacji częściowo do prowadzenia swoich firm. To jest naprawdękatastrofalna awaria.

Jedyną rzeczą związaną z iCloud, którą zmieniłem, było dodanie sklepu z kluczowymi wartościami do iCloud. Główny kod danych pozostał dokładnie taki sam, ta sama wersja modelu (bez migracji) itp.

W moich testach wszystko działało pięknie! Ale ku mojemu przerażeniu użytkownicy poinformowali, że ich dane nie były już dostępne po otwarciu zaktualizowanej aplikacji.

Co mogłoby być tego przyczyną?

Thestały adres URL sklepu (wszechobecny adres URL) nie powinien się zmienić.Połącz konflikty są również mało prawdopodobne, ponieważ problem ten powinien pojawić się przed aktualizacją.Pewna ingerencja w nowewszechobecny sklep z kluczowymi wartościami być może?
(Prawie to wykluczyłem.)

Poniżej znajduje się kod mojego modelu zarządzanego obiektu i sklepu trwałego. Daj mi znać, jeśli potrzebujesz czegoś innego do oceny problemu.

- (NSManagedObjectContext *)managedObjectContext {

    if (managedObjectContext_ != nil) {
        return managedObjectContext_;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext_ = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        [managedObjectContext_ performBlockAndWait:^{
            [managedObjectContext_ setPersistentStoreCoordinator:coordinator];
            if (useICloud) {
                [managedObjectContext_ setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];
                [[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(mergeiCloud:)
           name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
           object:coordinator];
            }
        }];
    }
    return managedObjectContext_;
}

i

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }

    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    NSURL *storeURL = [[self applicationDocumentsDirectory] 
            URLByAppendingPathComponent:@"SalesCalls.sqlite"];

    [options setObject:[NSNumber numberWithBool:YES] 
                  forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] 
                  forKey:NSInferMappingModelAutomaticallyOption];

    if (useICloud) {  // this is an internal flag set to YES
        NSURL *iCloudURL = [[NSFileManager defaultManager] 
                               URLForUbiquityContainerIdentifier:nil];

        if (nil!=iCloudURL) {
            NSString *cloudData = [[iCloudURL path] 
                       stringByAppendingPathComponent:@"data"];
            iCloudURL = [NSURL fileURLWithPath:cloudData];      

            [options setObject:@"at.topofmind.salesplus.store" 
                        forKey:NSPersistentStoreUbiquitousContentNameKey];
            [options setObject:iCloudURL 
                        forKey:NSPersistentStoreUbiquitousContentURLKey];

            NSURL *nosyncDir = [iCloudURL 
                        URLByAppendingPathComponent:@"data.nosync"];
            [[NSFileManager defaultManager] createDirectoryAtURL:nosyncDir 
                        withIntermediateDirectories:YES 
                        attributes:nil error:nil];

            storeURL = [nosyncDir 
                        URLByAppendingPathComponent:@"SalesCalls.sqlite"];
        }
    }

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] 
             initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ 
                  addPersistentStoreWithType:NSSQLiteStoreType
                  configuration:nil URL:storeURL options:options error:&error]) 
   {
        NSLog(@"Cannot create persistent store coordinator, %@, %@", 
                        error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}

Komentarze, opinie, domysły itp. (I oczywiście rozwiązania!) Są mile widziane.

AKTUALIZACJA:

Jeden z moich klientów stracił wszystkie dane i po ponownej instalacji i zresetowaniu wszystkiego (ponowne uruchomienie urządzenia itp.) Nie mógł już zsynchronizować się z iCloud. Symbol po prostu nie pojawia się w Ustawieniach.

questionAnswers(1)

yourAnswerToTheQuestion