2014-03-03 144 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」 –