2016-01-07 2 views
1

Я все еще несколько новичок в ObjC, поэтому, пожалуйста, простите меня, если моя терминология отключена.Вставка данных в пользовательский объект

У меня есть веб-сервиса, который возвращает следующие данные о событии в массиве:

  • EventName
  • eventAddress
  • eventCity

Массив вебсервис изменяется в размере от время от времени, в зависимости от того, сколько событий происходит в определенный день.

Моя проблема заключается в том, что мне нужно автоматически вытащить данные веб-службы в пользовательский класс (RandomEvent), но я не уверен, как это сделать.

Я могу сделать это вручную, как это, но так как размер возврата WebService массива изменяется, это не имеет смысла делать это таким образом (см):

- (NSArray *)todaysEvents { 
    RandomEvent *event1 = [RandomEvent new]; 
    [event1 setName:eventName[0]]; 
    [event1 setAddress:eventAddress[0]]; 
    [event1 setCity:eventCity[0]]; 

    RandomEvent *event2 = [RandomEvent new]; 
    [event2 setName:eventName[1]]; 
    [event2 setAddress:eventAddress[1]]; 
    [event2 setCity:eventCity[1]]; 

    RandomEvent *event3 = [RandomEvent new]; 
    [event3 setName:eventName[2]]; 
    [event3 setAddress:eventAddress[2]]; 
    [event3 setCity:eventCity[2]]; 

    return @[event1, event2, event3]; 
} 

Я знаю, что я придется перебирать массив webservice, но это насколько я могу получить. Каков наилучший способ присвоить значения массива моему пользовательскому классу? Любые рекомендации будут высоко оценены.

ответ

0

Для вас код:

- (NSArray *)todaysEvents { 
    NSMutableArray *resultArray = [NSMutableArray new]; 
    for (int i = 0; i<eventName.count; i++) { 
     RandomEvent *event = [RandomEvent new]; 
     [event setName:eventName[i]]; 
     [event setAddress:eventAddress[i]]; 
     [event setCity:eventCity[i]]; 
     [resultArray addObject:event]; 
    } 
    return [NSArray arrayWithArray:resultArray]; 
} 

Но, как я понимаю, вы пытаетесь синтаксический анализ полученных JSON в объекты вручную. Это может занять много времени. Попробуйте использовать фреймворки отображения, подобные этому https://github.com/EasyMapping/EasyMapping.

+0

О. Я думаю, потому что мы отвечали в одно время. Спасибо за downvote btw – shpasta

0

Предполагая, что eventName eventAddress eventCity имеют одинаковые длины, мы можем легко перебирать их. Измененный массив может использоваться для хранения всех создаваемых объектов RandomEvent. Обратите внимание, что есть также проверка безопасности, если один из массивов eventAddress или eventCity отличается от остальных.

- (NSArray *)todaysEvents { 
    NSMutableArray *eventsArray = [[NSMutableArray alloc] init]; 
    for (int i = 0; i < eventName.count; i++){ 
     if ((eventAddress.count < i) && (eventCity.count < i)){ 
      RandomEvent *event = [[RandomEvent alloc] init]; 

      [event setName:eventName[i]]; 
      [event setAddress:eventAddress[i]]; 
      [event setCity:eventCity[i]]; 

      [eventsArray addObject:event]; 
     } 
    } 

    return [NSArray arrayWithArray:eventsArray]; 
} 

Еще одно предложение было бы создать RandomEvent объекты, как только они считываются из веб-службы. Таким образом, дополнительные массивы не должны быть переданы.

0

Это не относится к языку программирования. Это больше вопрос ООП

Да, вы правы, вам придется перебирать результаты для сопоставления между DTO для просмотра модели. Это может повториться, но важно/полезно отделить DTO и просмотреть модели.

От вас пример кода, похоже, у вас есть несколько массивов, для eventName, eventAddress и т. Д.
хорошая практика иметь один массив объекта ответа. Так структура должна быть Массив ResponseObjects

Класс ResponseObject @property EventName @property eventAddress @property eventCity

**** **** псевдокод
- (NSArray *) mapDTOtoViewModel :(NSArray) _responseArray {

// Использовать initWithCapacity вместо init
NSMutableArray viewModels = [NSMutableArray alloc] initWithCapacity: [_ responseArray count]];

// Использовать быстрое перечисление для лучшей производительности
для (Response * ответ в _responseArray) {
RandomEvent * событие = [RandomEvent новый];
[event setName: response.eventName];
[event setAddress: response.eventAddress];
[мероприятие комплектCity: response.eventCity];

[viewModels addObject:event]; 

}
возврата ViewModels;

}

+0

Спасибо всем. Это сводило меня с ума. – dbarrett

Смежные вопросы