0

我正在以同一个 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,问题仍然存在。

我可以做些什么来解决这个问题?这是一个错误吗?

4

1 回答 1

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"];
}

I hope this makes sense and helps someone else out.

于 2016-02-11T08:26:34.713 回答