背景:我有一個託管對象Car。我有一個RESTful搜索API坐在本地主機/汽車/搜索。返回的結果是來自服務器端的Car對象,但我只想保存用戶選擇的那個。我想在他們退出搜索時放棄剩餘的汽車。使用核心數據的RestKit中的臨時對象的最佳做法
起初我都喜歡:
@interface Car : NSManagedObject //<--- managed object
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
@interface TransientCar : NSObject //<--- regular NSObject!
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
我被映射REST API搜索結果JSON成顯示搜索結果,而不是將它們保存到上下文的目的TransientCar對象。默認情況下,如果映射託管對象,RestKit將調用其+對象便利工廠來創建對象並將其插入到當前上下文中(硬編碼到sharedManager的對象存儲的上下文,btw!)
這似乎不可持續。所以,現在我只是用的NSMutableDictionary,直到用戶點擊進入詳細視圖,並做一些事情值得保存爲一個真正的管理對象來保存搜索結果數據:
RKObjectMapping* tempCarMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[tempCarMapping mapKeyPathsToAttributes:
@"year", @"year",
@"make", @"make",
@"model", @"model",
nil];
這是一個好的做法呢?使用NSMutableDictionary作爲臨時表示,直到用戶做了一些事情才能保證將新對象插入到上下文中?我很喜歡使用原始的託管對象子類來表示數據,但不知何故能夠將其標記爲「不要保留」或什麼,但每次我這樣做,我覺得我正在與框架戰鬥(和競賽條件)。我也嘗試過使用的刮傷/暴殄天物方面通過創建一個新RKObjectManager,只是清除其整個來龍去脈之後,但RestKit的ActiveRecord的類別的+ managedObjectContext方法是硬編碼返回:
[[[RKObjectManager sharedManager] objectStore] managedObjectContext];
之類的舷窗曾經使用的可能性臨時/垃圾數據的臨時上下文。
有剛剛從NSObject的繼承的瞬態模型類是好的,但我最關心的是保持瞬態模型最新與NSManagedObject版本。與技術相比,它更像是代碼可維護性問題。這將是很好的編輯>生成NSManagedObject子類有一個複選框「與鏡像的NSObject子類」。 – 2012-04-01 22:47:05
當然 - 如果你的模型會隨着頻率改變,我所概述的其他方法之一將是一個不錯的選擇。 – 2012-04-02 00:52:01