Я делаю какой-то самодельный анализ и «сопоставление объектов», вы увидите, на данный момент не совсем сопоставление объектов, но это моя цель, мне нужно сначала найти лучший подход.
Пример текущего упрощенного кода
Parser
Сегодня у меня есть парсер, специально созданный для моего приложения, вот ключевой метод, вы получите его.
-(void)jsonParserDidFinishParsing:(NSDictionary *)dic fromFile:(BOOL)file
{
if ([dic objectForKey:@"timeline"]) {
NSArray *items = [dic objectForKey:@"timeline"];
for (NSDictionary *item in items) {
MSTimelineItem *aItem = [[MSTimelineItem alloc]initWithDic:item];
[delegate timelineParserDidParseAnItem:aItem];
}
[delegate timelineParserDidFinishParsing];
}
}
Модель
У меня есть модели с каким-то стандартным конструктором, как этот (конечно, в моем реальном приложении ключи являются константами).
-(id)initWithDic:(NSDictionary *)dic
{
self = [super init];
if (self) {
_udid = [dic objectForKey:@"udid"];
_picUrl = [dic objectForKey:@"profile"];
_name = [dic objectForKey:@"name"];
_job = [dic objectForKey:@"job"];
}
return self;
}
Цель
Сделайте его более динамичным, избегая изменения локального ключа при изменении сервера.
Сделай что-нибудь красивое ...
подход
Избегайте всего этого конструкторского кода, мой подход заключается в использовании KVC, именовать свойства с тем же именем, что и ключи JSON, и сохранять только мои свойства @ dymanic для вычисляемых вещей. Так что я могу буквально зацикливаться в свойствах dic JIC и использовать setObject:ForKey
из парсера.
При таком подходе мне нужно только сохранить свойства, все еще некоторый код, но я могу с этим справиться. Изменить ключ сервера, изменить свойства, готово!
проблемы
У меня есть некоторый объект с отношением, например модель может содержать массив других моделей. Все еще нужна логика, чтобы справиться с этим. Также сохраняя все свойства можно еще много кода.
Также доступ к или установка свойств, которые не существуют, приведет к сбою приложения. Что я могу сделать против этого?
Заключение
Во всех случаях мне все еще нужно знать ключи / свойства в какой-то момент. Доступ к свойствам объектов лучше, чем object:forKey
, так как я получу мгновенное предупреждение и ошибки.
Я не хочу использовать фреймворк, такой как RESTKit, я создал свой собственный фреймворк для вещей Rest, мне нужен только этот динамический подход, чтобы иметь полностью стандартный набор классов.
Я также знаю, что у меня нет знаний, чтобы придумать более продуманное решение, твой ход:)
Вопрос
Я прав? Каков наилучший подход с точки зрения вашего опыта, мне действительно интересно услышать, что вы делали раньше, почему это сработало, почему это хорошо или нет.
Надеюсь, вам понравилась презентация;)