Лучшие практики для временных объектов в RestKit с Core Data
Предыстория: у меня есть управляемый объект, автомобиль. У меня есть API поиска RESTful на localhost / cars / search. Возвращенные результаты являются объектами Car со стороны сервера, но я хочу сохранить только тот, который выбирает пользователь. Остальные автомобили, которые я хочу выбросить, когда они возвращаются из поиска.
Сначала я был похож на:
@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
Я отображал результаты поиска RSON API JSON в объекты TransientCar с целью отображения результатов поиска, но не сохранения их в контексте. По умолчанию, если вы сопоставляете управляемый объект, RestKit вызовет фабрику удобства + объекта для создания объекта и вставки его в текущий контекст (жестко запрограммированный в контекст хранилища объектов sharedManager, кстати!)
Это казалось неустойчивым. Так что теперь я просто использую NSMutableDictionary для хранения данных результатов поиска, пока пользователь не коснется подробного представления и не сделает что-то стоящее для сохранения реального управляемого объекта:
RKObjectMapping* tempCarMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[tempCarMapping mapKeyPathsToAttributes:
@"year", @"year",
@"make", @"make",
@"model", @"model",
nil];
Это хорошая практика? Используя NSMutableDictionary как временное представление, пока пользователь не сделает что-то, что оправдывает вставку нового объекта в контекст? Я был фанатом использования исходного подкласса управляемых объектов для представления данных, но каким-то образом смог пометить его как «не хранить» или что-то в этом роде, но каждый раз, когда я делаю это, я чувствую, что борюсь с фреймворком (и условия гонки). Я также попытался использовать контекст с нулями / выбрасыванием, создав новый RKObjectManager и просто очистив весь его контекст после этого, но метод + managedObjectContext категории RestRit ActiveRecord жестко задан для возврата:
[[[RKObjectManager sharedManager] objectStore] managedObjectContext];
Такой тип исключает возможность использования пустого контекста для временных / мусорных данных.