【发布时间】:2013-09-18 21:07:53
【问题描述】:
我有一个类似这样的节点详细信息网络服务:
<nid>23</nid>
<timestamp>1345634</timestamp>
<name>Some Name</name>
<synonym_nids>
<item>
45
</item>
<item>
85
</item>
</synonym_nids>
我用我的NSManagedObject 子类创建了RKManagedObjectMapping,它应该保持上述结构。上面提到的nid(<nid> 和<synonym_nids>)是独一无二的。同义词集合本身应该有唯一的 nid。
我可以在使用 API -setPrimaryKeyAttribute 映射到带有 NSManagedObject 子类的主级别 xml 映射期间将 <nid> 标记为唯一。我确实检查了本地对象中时间戳的值,并将其与列表 API 返回的<timestamp> 进行比较,并且仅当时间戳已过时时才将该对象标记为“脏”。接下来,我只获取那些设置了“脏位”的节点的详细信息——上面显示的 XML 是从详细 API 中提取的。现在,当设置了脏位并且完成了详细 API 的获取时,我最终将多个同义词 id 添加到关系集中,因为 Restkit 中没有机制(根据我目前的研究)来检查 nid 是否为 45和 85(在这种情况下)已经存在于关系集中。因此,每次对象被标记为“脏”时,Restkit 自然会为 nid 45 和 85 添加多个条目。此外,由于没有使用 coredata 在NSSet(一对多)关系中直接输入NSNumber 的固有机制,因此我在NSNumber 周围创建了一个包装器对象,这是一个NSManagedObject 子类以将其添加到关系中设置。
模型对象如下所示:
@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 的子类。
【问题讨论】:
标签: iphone cocoa-touch core-data restkit restkit-0.20