2016-02-08 6 views
0

Я тестирую синхронизацию данных на двух iPads, зарегистрированных в качестве одного и того же пользователя Simperium.Simperium on iOS не синхронизирует данные правильно

  • Если я создам объект с именем object1 на iPad1, он успешно синхронизируется с iPad2.
  • Если я создаю объект с именем object2 на iPad2 успешно синхронизируется с iPad1
  • Если я изменяю object1 на iPad2 успешно синхронизируется с iPad1
  • Если я изменяю object2 на iPad1 успешно синхронизируется с iPad2
  • Если я измените объект1 на iPad1, он НЕ синхронизирует изменение с iPad2, хотя он нажимает на изменение в хранилище данных Simperium.
  • Если я изменяю объект2 на iPad2, он НЕ синхронизирует изменение с iPad1, хотя он нажимает изменение на хранилище данных Simperium

Я бежал Simperium 0.8.3. Я просто обновился до Simperium 0.8.12, и проблема все еще существует.

Что можно сделать для устранения этой проблемы? Это ошибка?

+0

Привет, Виктор. Simperium должен справиться с этим сценарием, можно ли получить доступ к используемому вами коду? (или, возможно, более простой/меньший PoC просто сделает трюк). Я не смог воспроизвести на моем конце. Спасибо! –

ответ

0

Я думаю, что понял. У меня был метод, который я создал, который добавил объект к Core Data и написал значения nil для любых данных, которые не были предоставлены. Например:

+(BOOL) addActivity:(NSNumber *)identifier item_id:(NSNumber *)item_id { 

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSManagedObjectContext *context = appDelegate.managedObjectContext; 

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Activity" inManagedObjectContext:context]; 
    Activity *a = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 
    [a setValue:identifier forKey:@"id"]; 
    [a setValue:item_id forKey:@"item_id"]; 

    // Save the context. 
    NSError *error = nil; 
    if (![context save:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

     return NO; 

    } else { 

     return YES; 
    } 

    return NO; 
} 

Видимо SPDiffer не нравится, так как он продолжал бросать ошибки, как:

transform diff for a ghost member (ghost <SPGhost: 0x7fba9617dae0>, memberData { 
    <data> 
}) that doesn't exist (item_id): { 
    o = "+"; 
    v = 0; 
} 

когда item_id существует, за исключением того, что было ноль значение, записанное так SPDiffer не мог сказать типа. Я добавил некоторые операторы if в свой код, чтобы не писать значения nil и просто игнорировать это поле.

if (item_id) { 
    [a setValue:item_id forKey:@"item_id"]; 
} 

Я надеюсь, что это имеет смысл и помогает кому-то другому.

Смежные вопросы