0

我有一个节点详细信息网络服务,它是这样的:

<nid>23</nid>
<timestamp>1345634</timestamp>
<name>Some Name</name>
<synonym_nids>
 <item>
  45
 </item>
 <item>
  85
 </item>
</synonym_nids>

RKManagedObjectMapping用我的NSManagedObject子类创建了应该保持上述结构的子类。上面提到的nid(<nid><synonym_nids>)是唯一的。同义词集合本身应该有独特的 nid。

<nid>我可以在使用 API-setPrimaryKeyAttribute映射到具有 NSManagedObject 子类的主级别 xml 映射期间将其标记为唯一。我确实检查了本地对象中时间戳的值并将其与返回的进行比较<timestamp>来自列表 API 并仅在时间戳已过时时将对象标记为“脏”。接下来,我只获取那些设置了“脏位”的节点的详细信息——上面显示的 XML 是从详细 API 中提取的。现在,当设置了脏位并且完成了详细 API 的获取时,我最终将多个同义词 id 添加到关系集中,因为 Restkit 中没有机制(根据我目前的研究)来检查 nid 是否为 45和 85(在这种情况下)已经存在于关系集中。因此,每次对象被标记为“脏”时,Restkit 自然会为 nid 45 和 85 添加多个条目。此外,由于没有使用 coredata 直接进入(一对多)关系的内在NSNumber机制NSSetNSNumberNSManagedObject子类将其添加到关系集中。

模型对象如下所示:

@interface NGArticle : NSModelBase <NGArticleObjectMappingProtocol>
@property (nonatomic, retain) NSNumber * nodeID; // <nid>
@property (nonatomic, retain) NSString * prominentCommonName; // <name>
@property (nonatomic, retain) NSDate * lastChanged; // <timestamp>
@property (nonatomic, retain) NSSet *lookAlike; // <synonym_nids>
@end

@interface NGArticle (CoreDataGeneratedAccessors)
-(void)addLookAlikeObject:(NGInteger64*)value;
-(void)removeLookAlikeObject:(NGInteger64*)value;
-(void)addLookAlike:(NSSet*)values;
-(void)removeLookAlike:(NSSet*)values;
@end

我如何有效地处理这种情况?Restkit 是否有任何固有的能力来处理这种情况?

更新:

NGInteger64 对象的结构:

@interface NGInteger64:NGModelBase
@property (nonatomic, retain) NSNumber *number; // This number is of Integer 64 type which is set in managed object model's xcdatamodel file.
@end

请注意,它NGModelBase是的子类,NSManagedObject因此NGArticle也是NGInteger64的子类NSManagedObject

4

1 回答 1

1

Restkit 每次都会为 nid 45 和 85 添加多个条目

这意味着您还没有教过 RestKit 如何找到指定标识符的实体的现有实例。在这种情况下,RestKit 正在创建新对象并将它们添加到关系中。

我可以在映射期间标记为唯一

是的,您必须这样做以避免重复。指定的名称setPrimaryKeyAttribute应该是实体上的属性(不是 XML 中的源键),所以nodeID.

于 2013-09-19T15:47:05.550 回答