2013-06-20 71 views
0

我將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並...這是在那裏我已經死心了,轉身計算器;)

回答

0

因爲它通常會發生,我發現SO張貼後的溶液:)

的問題是,RKManagedObjectRequestOperations其中所有前 restkit創建實際上發送了信息。因此,所有請求的上下文都是相同的(如適當的ObjectRequestOperationWithObject方法中所述,並且由於上下文引用是「舊」引用,所以更改不會傳播。建立在enqueueBatchOfOperations完成塊RKManagedObjectRequestOperations,現在一切工作正常與新創建taxID;)