在 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 同步