我有一个节点详细信息网络服务,它是这样的:
<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
机制NSSet
,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
。