iOS上的Simperium无法正确同步数据

时间:2016-02-08 05:46:45

标签: ios synchronization simperium

我在同一个Simperium用户登录的2台iPad上测试数据同步。

  • 如果我在iPad1上创建一个名为object1的对象,它会成功与iPad2同步。
  • 如果我在iPad2上创建一个名为object2的对象,它会成功与iPad1同步
  • 如果我在iPad2上修改object1,它会成功与iPad1同步
  • 如果我在iPad1上修改object2,它会成功与iPad2同步
  • 如果我在iPad1上修改object1,它不会将更改与iPad2同步,尽管它确实将更改推送到Simperium的数据存储
  • 如果我在iPad2上修改object2,它不会将更改与iPad1同步,尽管它确实将更改推送到Simperium的数据存储

我正在运行Simperium 0.8.3。我刚刚更新到Simperium 0.8.12,问题仍然存在。

如何解决此问题?这是一个错误吗?

1 个答案:

答案 0 :(得分: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存在时,除了写入了nil值,因此SPDiffer无法告诉类型。我在代码中添加了一些if语句,因此我不会写出nil值而只是忽略该字段。

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

我希望这有意义并帮助其他人。