RestKit 升级到 0.10.0 后崩溃

Posted

技术标签:

【中文标题】RestKit 升级到 0.10.0 后崩溃【英文标题】:RestKit crashes after upgrading to 0.10.0 【发布时间】:2012-05-13 02:10:22 【问题描述】:

我似乎能够很好地启动 restkit 并使用传统的 loadobjectsatresourcepath:delegate: 方法加载对象。但是,当我引入 block:^ 时,restkit 每次都会崩溃。

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/v1/places" delegate:self block:^(RKObjectLoader* loader) 
    loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[Place class]];
];

我在日志中得到了这个:

2012-05-12 19:07:32.266 App - [RKObjectManagerloadObjectsAtResourcePath:delegate:block:]: unrecognized selector sent to instance 0x3aa2e0
2012-05-12 19:07:32.268 App - *** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[RKObjectManager   loadObjectsAtResourcePath:delegate:block:]: unrecognized selector sent to instance 0x3aa2e0'

关于如何解决此问题的任何想法?谢谢!

【问题讨论】:

【参考方案1】:

异常告诉您问题的确切原因:RKObjectManager 不响应 loadObjectsAtResourcePath:delegate:block:。快速浏览 API 文档会发现 the original method 在 0.10.0 中不再存在,并且似乎已被 loadObjectsAtResourcePath:usingBlock: 替换。

您应该能够通过使用新方法来避免异常:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/v1/places" usingBlock:^(RKObjectLoader* loader) 
    loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[Place class]];
];

【讨论】:

谢谢!这就是我所怀疑的。这让我很困惑,然后我发现 Xcode 正在链接一个旧的 Restkit 库并且我的代码完成工作不正常。删除我的派生数据内容并重建后,一切正常。

以上是关于RestKit 升级到 0.10.0 后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

RestKit - 仅在第二次调用时将缓存保存到核心数据

使用 Restkit 在 Core Data 中删除后保存对象使其崩溃

Restkit 0.10.0 & ios 6.1 - objectLoaderWithResourcePath:delegate 方法不进行 http 调用

将输出映射到 Restkit 中的核心数据时崩溃

RestKit 0.20.1 将本地 JSON 映射到 Core Data 崩溃

RestKit iOS 应用程序应请求崩溃