我正在使用 RestKit 0.10.3 从我的自定义网络服务中请求新邮件。
我让所有对象和映射都正常工作但我遇到的问题是对服务器(RKObjectLoader实例)发出的单个请求返回的对象数。
假设我有一个MessengerConversation
对象,其conversationID
属性值等于1
且其中没有MessengerMessage
(这是一个空对话)。< / p>
最初,我已经从我的自定义网络服务请求了五封新邮件:
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
}
]
}
目前,一切正常,结果可以通过objects
回调中返回的RKObjectLoader
来访问:
[objects count] == 5
但是在向同一API请求旧的五条消息之后,出现了一个不希望的结果:
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有效负载映射的对象?
我想我错过了一些东西,但我无法理解。
提前致谢。
和Piva
答案 0 :(得分:0)
我可以通过更新我在MessengerMessage
个对象中插入加载的MessengerConversation
实例的方式来解决这个问题。
我没有使用RKObjectLoader
'targetObject'属性来定义从哪个会话加载的消息开始使用RKObjectLoaderDelegate
'objectLoader:willMapData:'方法来手动插入conversationid
键到每个加载的消息。
然后我只是将MessengerMessage
映射设置为我的自定义映射提供程序以处理下一个命令:
[objectMappingMessage mapKeyPath:@"conversationid" toAttribute:@"conversationID"];
[objectMappingMessage hasOne:@"conversation_" withMapping:objectMappingConversation];
[objectMappingMessage connectRelationship:@"conversation_" withObjectForPrimaryKeyAttribute:@"conversationID"];
现在只有加载的消息(来自当前的JSON有效负载)从RKObjectLoader回调返回到objects
数组。
另外,感谢@blakewatters努力回答我在IRC上的一些问题。