2013-06-20 51 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;)