0

我正在编写一个使用 CoreData+RestKit 的 iOS 应用程序。我有一个问题,当我从服务器同步时,本地未同步的实体无效。我正在使用 RestKit 0.10.1

场景: 从服务器同步数据。在本地添加一个条目(这与服务器不同步)。从服务器同步数据。

结果: 本地实体被排除在对象图之外。(我仍然可以在数据库中看到它,只是没有连接)

JSON

{
  ThreadId: 322,
  ThreadMessages: 
  [    
    {
      Text: "Hello Joe",
      AuthorId: 635236,
      AuthorName: "Trudy",
      Timestamp: "2012-06-09T15:42:45.757",
      ThreadMessageId: 546,
      ThreadId: 322
    }
  ]
}

映射

threadMessageMapping = [RKManagedObjectMapping mappingForClass:[ThreadMessage class] inManagedObjectStore:objectStore];
threadMessageMapping.primaryKeyAttribute = @"threadMessageId";    
[threadMessageMapping mapKeyPath:@"ThreadMessageId" toAttribute:@"threadMessageId"];
[threadMessageMapping mapKeyPath:@"ThreadId" toAttribute:@"threadId"];
[threadMessageMapping mapKeyPath:@"Text" toAttribute:@"text"];
[threadMessageMapping mapKeyPath:@"AuthorId" toAttribute:@"authorId"];
[threadMessageMapping mapKeyPath:@"AuthorName" toAttribute:@"authorName"];
[threadMessageMapping mapKeyPath:@"Timestamp" toAttribute:@"timestamp"];


threadMapping = [RKManagedObjectMapping mappingForClass:[Thread class] inManagedObjectStore:objectStore];
threadMapping.primaryKeyAttribute = @"threadId";
threadMapping mapKeyPath:@"ThreadId" toAttribute:@"threadId"];
[threadMapping mapKeyPath:@"ThreadMessages" toRelationship:@"threadMessages" withMapping:ThreadMessageMapping];

详细信息: 我可以在我的应用程序中使用上述映射。我还可以在本地插入一个可以正常工作的新 ThreadMessage(它的 threadMessageId 为 0)。当我从服务器同步并且 Restkit/CoreData 发现我的新项目时,就会出现问题。我不会留在我的对象图中。调查 sqlite db 我发现这是因为表中的ZTHREAD链接ZTHREADMESSAGE被取消了。

有没有办法让 RestKit 留下不是单独来自服务器的项目?

我也尝试使用 connectRelationship 来水合连接,但似乎使用我的 json 是不可行的

此行导致所有实体ZTHREAD中的列ZTHREADMESSAGES变为空白

[threadMapping connectRelationship:@"threadMessages" withObjectForPrimaryKeyAttribute:@"threadId"];

如果我映射反向关系,则该ZTHREAD列很好,但是在重新同步时,新的本地项目仍会从对象图中删除。

[threadMessageMapping mapKeyPath:@"ThreadMessageId" toAttribute:@"threadMessageId"];
[threadMessageMapping mapRelationship:@"thread" withMapping:threadMapping];
[threadMessageMapping connectRelationship:@"thread" withObjectForPrimaryKeyAttribute:@"threadMessageId"];

我一直无法弄清楚 RestKit 在哪里使我的新 ThreadMessage 无效。我认为它在某个地方,RKObjectMappingOperation但我看不出魔法发生在哪里。我只能看到 ThreadMessage.ThreadId 在第二次同步后被取消了。

4

0 回答 0