2014-03-03 35 views
1

我正在处理一个应用程序,我需要将对象与我的API同步。我使用RestKit 0.20.3。RestKit 0.20.3 +核心数据 - 跳过映射操作

同步过程从服务器拉取对象开始,然后推送用户在应用程序内修改过的对象。 因此,在拉动步骤中,我需要忽略已经在本地修改的对象,所以它们不会被服务器版本覆盖。

我对我的对象使用CoreData,并且我为本地修改的那些设置了布尔属性“modified”为YES。 因此,在同步过程中的GE​​T之后,我需要跳过具有此“已修改”属性的对象的映射步骤,但我无法准确找到该如何执行此操作。

到目前为止我发现的唯一方法是直接在RKMappingOperation内添加一个条件,但它很脏。

有没有更好的方法来做到这一点在RestKit(和通过不修改RestKit代码)?

回答

6

好吧,我一直在调查,我刚找到解决方案。

它实际上可以注册一个自定义的类作为RKResponseMapperOperation数据来源:

[RKManagedObjectResponseMapperOperation registerMappingOperationDataSourceClass:[MyCustomDataSource class]]; 

MyCustomDataSource应该实现RKMappingOperationDataSource协议。 我从RKManagedObjectMappingOperationDataSource继承,因为我通过核心数据使用托管对象。

@interface SUManagedObjectMappingOperationDataSource : RKManagedObjectMappingOperationDataSource 
@end 

在实现中,我只是覆盖下面的方法来我跳过逻辑添加到现有的一个:

- (BOOL)mappingOperationShouldSkipPropertyMapping:(RKMappingOperation *)mappingOperation 
+0

#进口“MyCustomDataSource.h” #进口“PRManagedObjectMappingOperationDataSource.h” –