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