SORU
23 Ocak 2013, ÇARŞAMBA


Daha fazla içerikler Çekirdek Veri eşzamanlı sıkıntılardan

Yani, sonunda oldu. Herhangi bir bağımsız iPhone geliştirici için en kötü durum senaryosu oluştu. Birden çok kullanıcının tam bildiriliyorveri kaybıbenim app yükseltme sonra. içerikler Core Data sync çalışmıyor. Benim kullanıcıları kısmen bu uygulama işlerini çalıştırmak için kullanıyor. Bu bir gerçekgeri dönülemez.

Değiştirdim içerikler ile ilgili tek şey içerikler için anahtar-değer deposu eklemek oldu. Çekirdek veri kodu tam olarak model sürümü (göç) vb aynı aynı kaldı.

Benim testlerde her şey çok güzel işlenmiş! Ama benim dehşet için, kullanıcılar verilerini artık güncelleştirilmiş app açtılar orada olmadığını bildirdi.

Bunun nedeni ne olabilir?

  • sürekli mağaza URL(her yerde bir URL) değişmemiş olması gerekir.
  • Çatışmalar birleştirmebu sorun güncellemeden önce olmamalıydı olarak da olamazlar.
  • Yeni bazı girişimanahtar-değer deposu her yerdebelki de?
    (Hemen hemen bu dışladı.)

Aşağıda yönetilen nesne modeli kodu bulmak ve kalıcı saklayın lütfen. Sorunu değerlendirmek için başka bir şeye ihtiyacın olursa bana haber ver.

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

ve

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

Yorumlar,, çılgın tahminler vb görüşler. (ve tabii ki çözümleri!) hepiniz hoş geldiniz.

GÜNCELLEME:

Müşterilerimden biri, tüm veri ve her şeyi yeniden sıfırlama sonra yeniden cihazı, vb.) kayıp içerikler ile daha fazla senkronize edemedi. Bu sembol sadece Ayarlarında görünmüyor.

CEVAP
26 EKİM 2013, CUMARTESİ


OpenSSL kaynaklarına bakarak, bu şifreli veri doldurma geçersiz gerçekleşebilir. Bu farklı tuşları ile oluyor, ve bir örnek verebilir misiniz? Ve Aracı Bu tür anahtarları (aynı OpenSSL ya da değil gibi) oluşturmak için kullanılan nedir? Muhtemelen, doldurma/edilmediği ya da doğru bir yerine sıfır doldurma yazar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • EEVblog

    EEVblog

    4 NİSAN 2009
  • JTechTalk

    JTechTalk

    11 Temmuz 2010