在 AFIncrementalStore 中保存对象时出错。 ResponseObject 是一个 NSArray 而不是 NSDictionary 尽管 JSON 响应有效

Posted

技术标签:

【中文标题】在 AFIncrementalStore 中保存对象时出错。 ResponseObject 是一个 NSArray 而不是 NSDictionary 尽管 JSON 响应有效【英文标题】:Error on saving object in AFIncrementalStore. ResponseObject is an NSArray instead if NSDictionary despite valid JSON resposne 【发布时间】:2012-12-30 21:11:58 【问题描述】:

全部,

最近两天我正在尝试解决一个问题,但似乎无能为力。如果要求显而易见,请提前道歉。

在一个非常简单的数据模型中,我尝试插入一个新对象用户。 (属性:name、password 和 id 分别是一个 NSString、一个 NSString 和一个 NSNumber)。新对象成功创建 在 API 和外部 mysql 服务器中。但是,在 HTTPrequest 的完成块中,当 (我认为)后备存储已填充它尝试创建资源标识符。

这是应用程序在尝试从表示字典中获取 allKeys 时在此方法中崩溃的原因:

(NSString *)resourceIdentifierForRepresentation:(NSDictionary *)representation ofEntity:(NSEntityDescription *)entity fromResponse:(NSHTTPURLResponse *)response 从服务器返回的 JSON 响应如下:

["id":20,"name":"john doe","password":"secret"]

有人知道吗?如果我今年能解决这个问题,将不胜感激!!!

旁注:马特干得好!

附带问题:当连接恢复时,AFIS 将如何处理本地存储、本地更改以及与服务器的同步?

全部,

提前致谢,祝您 2013 年愉快!!!

[更新]

问题是我得到了一个 NSArray 而不是 NSDictionary。我可以通过更改 AFIS savecontext 中的代码以传递 responseObject[0] 来简单地修复它,但是我不想更改 AFIS 代码,而且我仍然觉得奇怪的是,当我有一个有效的 JSON 响应时我没有得到一个 NSDictionary

【问题讨论】:

【参考方案1】:

您可以覆盖 AFIS 用于从 json 数据中获取结果对象的方法。

- (id)representationOrArrayOfRepresentationsOfEntity:(NSEntityDescription*)entity
                              fromResponseObject:(id)responseObject

响应对象应该是索引为 0 的字典数组。

【讨论】:

以上是关于在 AFIncrementalStore 中保存对象时出错。 ResponseObject 是一个 NSArray 而不是 NSDictionary 尽管 JSON 响应有效的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFIncrementalStore 和 AFRestClient 进行分页

AFIncrementalStore:仅使用 ID 拉取相关实体

AFIncrementalStore 是不是需要 NSMainQueueConcurrencyType 上下文?

AFIncrementalStore 将核心数据与 REST API 同步

我可以“手动”将项目插入 AFIncrementalStore 的缓存吗?

使用 afincrementalstore 处理关系 ID