Я должен задать вам вопрос! Я изучаю некоторые случаи создания RESTFul WS для приложения. Через несколько дней я решил начать разработку на PHP. Я делаю объект POPO, используя также реферат JsonSerializable учебный класс. Ну, серверная сторона готова !!
Теперь я хочу автоматизировать построение iOS-классов на стороне iOS в соответствии с объектом POPO. Затем, когда iOS получит данные от соединения, я хочу отразить данные, чтобы найти правильный класс. Я думаю о таком процессе:
NSData -> NSDictionary -> Отражение -> Класс iOS POPO
Ну, то отражение Шаг все еще работает, потому что я действительно не хочу анализировать весь NSDictionary, чтобы найти правильное POPO. Я не буду делать такие вещи, как ниже …
if ([dictionary.firstObject isKindOfClass: [POPObject class]])
{
POPObject *popo = [[POPObject alloc] initWithObj: dictionary.firstObject];
return popo;
}
Я не делаю этого, потому что некоторые POPOObject будут содержать свойство NSArray, которое будет содержать другие POPObjects! Так что, может быть, лучше, если я разработаю что-нибудь рекурсивное …
Я объясню это хорошо. Подумайте о JSON, как это:
{
"firstFatherObj": {
"firstObject": true,
"secondObject": {
"firstProperty" : true,
"secondProperty": "Prop"}
},
"http-status": 200
}
Это примерный пример, но будет некоторый второй / третий / четвертый / и т. Д. Уровень подклассов, и он будет более дорогим и действительно тяжелым. Есть идеи? Спасибо!
Я думаю о некоторых абстрактных объектах ResponseObject, которые будут группировать больше POPObject в iOS. Поэтому, когда я звоню на сервер, я знаю кое-что об ответе, которого я буду ждать. Итак, я собираюсь создать этот реферат и делегировать его для разбора его связанному POPObject.
Пример: я собираюсь попросить сервер некоторую информацию о зарегистрированном пользователе. Я не должен проверять все POPObject (что, конечно, они не все USER), но я создаю ResponseUser объект, который будет анализировать JSON, и он поймет, какой класс подходит (например: userPosts, userPreferences и другие …).
Что вы думаете об этом?
Задача ещё не решена.
Других решений пока нет …