У меня есть веб-служба сведений об узле, которая выглядит примерно так:
<nid>23</nid>
<timestamp>1345634</timestamp>
<name>Some Name</name>
<synonym_nids>
<item>
45
</item>
<item>
85
</item>
</synonym_nids>
Я создал RKManagedObjectMapping
с моим подклассом NSManagedObject
, который должен поддерживать указанную выше структуру. Упомянутые выше ниды (оба <nid>
и <synonym_nids>
) уникальны. Коллекция синонимов сама по себе должна иметь уникальные идентификаторы.
Я мог бы пометить <nid>
как уникальный во время сопоставления с помощью API -setPrimaryKeyAttribute
с сопоставлением XML основного уровня с подклассом NSManagedObject. Я проверяю значение метки времени в локальном объекте и сравниваю его с возвращенным <timestamp>
из API листинга и отмечаю объект как «грязный», только если метка времени устарела. Затем я получаю сведения только о тех узлах, для которых установлен «грязный бит». Показанный выше XML является извлечением из подробного API. Теперь, когда грязный бит установлен и когда получение подробного API завершено, я в конечном итоге добавляю несколько идентификаторов синонимов в набор отношений, потому что в Restkit нет механизма (согласно моему исследованию до сих пор), чтобы проверить, соответствует ли nid 45 и 85 (в данном случае) уже существуют в наборе отношений. Итак, естественно, Restkit добавляет несколько записей для nid 45 и 85 каждый раз, когда объект помечается как «грязный». Кроме того, поскольку нет встроенного механизма для прямого ввода 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
.