Objective c CoreData&x2B;RestKit保留本地实体

Objective c CoreData&x2B;RestKit保留本地实体,objective-c,core-data,synchronization,restkit,Objective C,Core Data,Synchronization,Restkit,我正在编写一个使用CoreData+RestKit的iOS应用程序。当我从服务器同步时,本地未同步的实体会失效。我正在使用RestKit 0.10.1 场景: 从服务器同步数据。在本地添加条目(这与服务器不同步)。从服务器同步数据 结果: 本地实体被排除在对象图之外。(我仍然可以在数据库中看到它,只是没有连接) JSON { ThreadId: 322, ThreadMessages: [ { Text: "Hello Joe", Autho

我正在编写一个使用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数据库时,我发现这是因为
ZTHREADMESSAGE
表中的
ZTHREAD
链接被置零

有没有一种方法可以让RestKit保留不来自服务器的项目

我也尝试过使用connectRelationship来加强连接,但使用json似乎不可行

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

[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在第二次同步后变为零。

不确定它是否有用,但您是否尝试过使用SetNilFormisingRelationships属性?否-但将其设置为否没有帮助。有趣的是,如果我在模型中将threadMessage上的反向线程关系设置为非可选,则核心数据无法保存数据。但我仍然无法理解RestKit为什么要取消关系。服务器上没有id为0且未设置线程的消息?如果您这样做,它将不正确地映射到您的本地对象,因为它们具有相同的PK。或者,如果您的映射以某种方式失败,并且您的PK返回0,那么同样的情况也会发生。否-基本上是我在获取数据时收到的上面的JSON。RestKit希望取消数据库中的ZTHREAD。我猜是因为它不在服务器的数据集中。但是我想保留它!