我將RestKit 0.20.2與MagicalRecord結合使用(對於任何可以想到的最終上下文問題都很重要)。RestKit兩個連續的enqueueBatchOfObjectRequestOperations沒有直接映射到核心數據
我的應用程序是一個包含項目(實體)的節能門票(實體),每個項目都有一個稅(實體)。我的用例是這樣的:我需要同步核心數據與我的網絡服務器時,長時間的ipad重新連接到互聯網無法發送數據(無論什麼原因)
我的問題是能夠同步大量的對象(它可以從100到1000,甚至更多),以能夠發佈大量的對象沒有超時我設置restkit併發:
[RKObjectManager sharedManager].operationQueue.maxConcurrentOperationCount = 3;
現在這個工作絕對沒問題。但我的問題是,我有很多冗餘實體與每個項目同步。 例如,每個項目都有稅款,但我的模型中只有兩個稅款需要與Web服務同步,然後作爲與該項目的關係發送(我只將稅號)。因此,爲了規避每個postItem的問題,我檢查相關的Tax是否有ID,如果是,那麼我可以直接用它中的稅收關係解析該項目,如果沒有,我需要先同步稅務,然後將項目與返回的taxID。
解決方法也在按預期工作。但是同樣存在一個問題,因爲在每個postItem之間RestKit沒有在兩個請求之間保存新的TaxID,所以不是每次發送一次,而是每次遇到它時發送它,並且所有操作完成後,它會保存新創建的taxIDs
爲了提高我在restkit挖了一下,發現
- (void)enqueueBatchOfObjectRequestOperations:(NSArray *)operations
progress:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progress
completion:(void (^)(NSArray *operations))completion
所以,現在我建立RKManagedObjectRequestOperations我的稅實體和批次它們。 然後我同步這些項目。這是更有效的,而且我也不需要設置操作之間的依賴關係(因爲我需要他們按照一定的順序來執行,稅收則項目那麼整個票。)
問題兩個enqueueBatchOperations之間, RestKit不會在第一批的結果立即映射,即使我明確要求
[[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext saveToPersistentStore:&error]
它沒有被映射,因爲第一批所得稅後,我把所有的項目,我可以看到的是, taxID沒有設置,但是在完成所有批次後,我可以清楚地看到它們在我的核心數據文件中正確映射。因此,我認爲這是一個方面的問題,但是當我Digg的成RestKit並且更具體地
appropriateObjectRequestOperationWithObject:(id)object
method:(RKRequestMethod)method
path:(NSString *)path
parameters:(NSDictionary *)parameters
我看行580:
NSManagedObjectContext *managedObjectContext = [object respondsToSelector:@selector(managedObjectContext)] ? [object managedObjectContext] : self.managedObjectStore.mainQueueManagedObjectContext;
那臺mainQueueContext(而不是對象上下文)對於操作(我已經檢查了斷點),所以調用save或saveToPersistentStore應該將更改從子上下文傳播到mainQueue並...這是在那裏我已經死心了,轉身計算器;)