objective-c - RestKit 对象映射 : difficulty using setObjectMapping:forResourcePathPattern:withFetchRequestBlock

标签 objective-c ios core-data restkit

我的设置

以下一切正常:

RKManagedObjectMapping* chanMapping = [RKManagedObjectMapping mappingForClass:[Channel class] inManagedObjectStore:objectStore];
chanMapping.primaryKeyAttribute = @"chanId";
[chanMapping mapKeyPathsToAttributes:
 @"id",@"chanId",
 @"name", @"chanName",
 nil]; 

[objectManager.mappingProvider setMapping:chanMapping forKeyPath:@"Channels.channel"];

我可以打电话

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/channels" delegate:self];

我从服务器获取我的 channel ,它们由 Core Data 存储在本地。完美。

问题

但是,我现在不想让 RestKit 在下次执行 GET 时自动从核心数据存储中删除已从服务器中删除的 channel 。我知道这是通过添加以下内容来支持的:

[objectManager.mappingProvider setObjectMapping:chanMapping forResourcePathPattern:@"/channels" withFetchRequestBlock:^ (NSString *resourcePath) { 
        return [Channel fetchRequest];
    }];

然而,只要服务器上有任何新内容,所有 channel 都会被删除。

我尝试过的事情 [更新]

我已经使用以下答案中的步骤进行了调试。看起来好像映射不起作用/未找到(即我没有正确地将映射与资源路径相关联)。

deleteCachedObjectsMissingFromResult 中,cachedObjects 数组看起来不错,包含上次应该存在的所有对象,但 results 数组为空这显然导致 [results containsObject:object] 始终为 NO 并且所有对象都被删除。

我是否需要更改与资源路径映射有关的内容?

最佳答案

我查看了您更新后的描述。试一试:

  1. 切换回 setObjectMapping:forResourcePathPattern:withFetchRequestBlock
  2. 在您注册到 Channels.channel 的对象映射上设置 rootKeyPath

然后再试一次。正在进行一些 API 工作,以在一行中提供基于 URL 和 keyPath 的映射配置,但尚未合并到开发中。

关于objective-c - RestKit 对象映射 : difficulty using setObjectMapping:forResourcePathPattern:withFetchRequestBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516987/

相关文章:

ios - 转移到另一个类时方法不起作用

ios - 猜字游戏的股票代码/框架-键盘 UIView

uitableview - 如何以编程方式填充核心数据存储?

iphone - 在核心数据中保存一对多关系时出现问题

ios - 切换 tabBarController 索引而不是 segueing 时将数据从一个 ViewController 传递到另一个

objective-c - 如何将可变数量的参数传递给可变参数函数

objective-c - NSMenu 与 IBAction 方法用于单击菜单标题?

ios - UITableViewCell IBOutlets 为零

ios - Parse.com - 记住首次启动的日期,能够知道

objective-c - 奇怪的 XCode 4.2 和核心数据行为