【发布时间】:2012-09-27 11:03:09
【问题描述】:
我正在使用 RestKit 0.10.3 从我的自定义网络服务中请求新消息。
我的所有对象和映射都正常工作,但我遇到了一个关于向服务器发出的单个请求(RKObjectLoader 实例)返回的对象数量的问题。
假设我有一个MessengerConversation 对象,它的conversationID 属性值等于1,但其中没有MessengerMessage(这是一个空对话)。
最初我从我的自定义 Web 服务中请求了 5 条新消息:
GET /messenger/conversations/1/messages/?maxmsgcount=5
它返回了一个 JSON 有效负载,例如:
{
"messages": [
{
"content": "A new message.",
"messageid": 10
},
{
"content": "A new message.",
"messageid": 9
},
{
"content": "A new message.",
"messageid": 8
},
{
"content": "A new message.",
"messageid": 7
},
{
"content": "A new message.",
"messageid": 6
}
]
}
目前,一切正常,可以通过RKObjectLoader 回调返回的objects 访问结果:
[objects count] == 5
但是在向同一个 API 请求旧的 5 条消息后,却出现了不想要的结果:
GET /messenger/conversations/1/messages/?maxmsgcount=5&msgsbeforeid=6
返回 JSON 有效负载,例如:
{
"messages": [
{
"content": "A new message.",
"messageid": 5
},
{
"content": "A new message.",
"messageid": 4
},
{
"content": "A new message.",
"messageid": 3
},
{
"content": "A new message.",
"messageid": 2
},
{
"content": "A new message.",
"messageid": 1
}
]
}
问题在于[objects count] 现在等于10 而不是5 作为接收到的JSON 有效负载中返回的消息数。
这样,不可能从最新返回的 JSON 有效负载中跟踪最大和最小的消息 ID,因为 objects 数组包含引用对话内的所有消息。
Printing description of objects:
<__NSArrayM 0xa720a40>(
<MessengerMessage: 0xa721560> (entity: MessengerMessage; id: 0xa7021c0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p1> ; data: <fault>),
<MessengerMessage: 0x13360490> (entity: MessengerMessage; id: 0x133605a0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p2> ; data: <fault>),
<MessengerMessage: 0x13360510> (entity: MessengerMessage; id: 0xa7023a0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p3> ; data: <fault>),
<MessengerMessage: 0x13360550> (entity: MessengerMessage; id: 0xa7022b0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p4> ; data: <fault>),
<MessengerMessage: 0xa720290> (entity: MessengerMessage; id: 0xa702080 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p5> ; data: <fault>),
<MessengerMessage: 0xa71ca40> (entity: MessengerMessage; id: 0x13360cf0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p6> ; data: <fault>),
<MessengerMessage: 0x12f96c40> (entity: MessengerMessage; id: 0xa7023f0 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p7> ; data: <fault>),
<MessengerMessage: 0x133603c0> (entity: MessengerMessage; id: 0x13360b10 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p8> ; data: <fault>),
<MessengerMessage: 0x13360380> (entity: MessengerMessage; id: 0x13360c00 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p9> ; data: <fault>),
<MessengerMessage: 0xa720700> (entity: MessengerMessage; id: 0x13360a20 <x-coredata://569C8DF6-D912-4DFF-B5A2-C462F0355B3F/MessengerMessage/p10> ; data: <fault>)
)
由于映射问题,我正在使用下一个设置配置所有评论的请求:
[objectManager loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
loader.targetObject = [MessengerConversation findByPrimaryKey:query.conversationID];
...
}];
是否可以使RKObjectLoader 仅返回从最新接收的 JSON 有效负载映射的对象?
我想我错过了什么,但我想不通。
提前致谢。
皮瓦
【问题讨论】:
-
你在为映射器设置
primaryKeyAttribute吗? -
嗨@gdavis,感谢您的评论。是的,我正在设置所有实体
primaryKeyAttribute。所有映射过程都正常工作,只有结果出乎意料(它返回定义为请求的targetObject的对话内的所有消息)。更新我在对话中插入消息的方式解决了我的问题。