RestKit数据同步后本地删除问题

我使用RestKit作为应用程序的后端。 一切运作良好,但我遇到一个问题,提取本地删除后未经修改的数据。

这是匹配的path:

[self.objectManager addFetchRequestBlock:^NSFetchRequest *(NSURL *URL) { RKPathMatcher *pathMatcher = [RKPathMatcher pathMatcherWithPattern:@"cards"]; if([pathMatcher matchesPath:[URL relativePath] tokenizeQueryStrings:NO parsedArguments:nil]) return [NSFetchRequest fetchRequestWithEntityName:@"Card"]; return nil; }]; 

当API响应缺less一个本地对象时,删除正确传播。

但是,如果执行本地删除,如下所示:

  for(NSManagedObject *entity in cards) { [RKManagedObjectStore.defaultStore.mainQueueManagedObjectContext deleteObject:card]; 

如果再次执行/卡提取请求,如果在CoreData中刚被删除的对象没有改变,那么卡不会被更新。 直到应用程序重新启动或API响应中包含新对象之前,情况仍然如此。

即使服务器正在返回适当的JSON,RKMappingResult也是空的:

  2013-07-03 17:58:00.732 Thanx[76837:c07] I restkit.network:RKHTTPRequestOperation.m:185 GET 'http://api.thanx-web.dev/v2/cards' (200 OK) [0.1086 s] 2013-07-03 17:58:00.734 Thanx[76837:c07] <RKMappingResult: 0xac9b080, results={ "<null>" = ( ); }> 2013-07-03 17:58:00.734 Thanx[76837:c07] <RKManagedObjectRequestOperation: 0xbb32250, state: Successful, isCancelled=NO, request: <NSMutableURLRequest http://api.thanx-web.dev/v2/cards>, response: <NSHTTPURLResponse: 0xbb42060 statusCode=200 MIMEType=application/json length=201>> 

有什么我可以做的解决这个问题? 这似乎是某种caching问题。 但是,即使在本地删除后立即运行[RKManagedObjectStore.defaultStore resetPersistentStores:nil]函数似乎也无法解决此问题。

谢谢您的帮助,

达伦

编辑 – 这里是适用的模型映射:

 RKEntityMapping *mapping = [RKEntityMapping mappingForEntityForName:@"Card" inManagedObjectStore:self.objectManager.managedObjectStore]; // enable validations mapping.performKeyValueValidation = YES; // if validation fails, skip object rather than entire request mapping.discardsInvalidObjectsOnInsert = YES; // add json-to-model mappings [mapping addAttributeMappingsFromArray:@"card_id", @"last4", @"name"]; 

标识属性默认为card_id ,因此不会手动指定。

谢谢!

实际上,您必须从持久存储中获取数据,而不是当前创build的托pipe上下文。 我的意思是[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext

 NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"]; NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO]; fetchRequest.sortDescriptors = @[descriptor]; // Setup fetched results NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext sectionNameKeyPath:nil cacheName:nil]; // AND TO DELETE A MODEL : [[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject];