Нет, вы не хотите этого делать. Вы не хотите, чтобы ваш контроллер представления непосредственно обращался к массиву модели данных. Это будет работать в техническом смысле, но будет хрупким и, вероятно, потерпит неудачу по мере масштабирования проекта.
По мере усложнения проектов вам нужно будет все больше оборачивать объект модели данных (в данном случае xmlParser) в защитные слои методов для контроля и проверки того, как изменяется модель данных. В конце концов, у вас будут проекты с несколькими представлениями, несколькими контроллерами представления, а также информация, поступающая как от пользователя, так и от URL. Вы должны привыкнуть использовать объект модели данных не просто как тупое хранилище, в которое вы помещаете вещи, а как активный менеджер и верификатор ваших данных.
В такой ситуации я бы полностью обернул массив моей модели данных, сделав его свойством @protected или @private. Тогда я бы выделил методы для извлечения или вставки данных в реальный массив внутри самого класса модели данных. Ни один объект вне модели данных не должен иметь прямого доступа к массиву или знать его индексы.
Итак, в этом случае ваша модель данных будет иметь что-то вроде:
- (NSString *) textForLineAtIndexPath:(NSIndexPath *) anIndexPath{
//... do bounds checking for the index
NSString *returnString=[self.privateArray objectAtIndex:anIndexPath.row];
if (returnString=='sometest'){
return returnString;
}
return @""; //return an empty string so the reciever won't nil out and crash
}
, а также setTextForLineAtPath:
метод для установки линии, если вам это нужно.
Общие учебные материалы не тратят достаточно (обычно вообще не уделяют) времени на обсуждение модели данных, но модель данных на самом деле является ядром программы. Именно здесь находится реальная логика приложения, и поэтому он должен быть одним из самых сложных и тщательно протестированных классов в вашем проекте.
Хорошая модель данных должна быть независимой от интерфейса, то есть она должна работать с интерфейсом на основе представления, веб-интерфейсом или даже с командной строкой. Ему не следует ни знать, ни заботиться о том, чтобы его данные отображались в виде таблицы или любого другого элемента или типа интерфейса.
Когда я начинаю новый проект, первое, что я делаю, это закомментирую '[window makeKeyAndVisible];' в приложении делегат. Затем я создаю свой класс модели данных и тестирую его old-school, загружая данные и регистрируя результаты. Только когда он работает именно так, как я хочу, я перехожу к пользовательскому интерфейсу.
Итак, задумайтесь над тем, что вы хотите, чтобы приложение делало на абстрактном уровне. Кодируйте эту логику в пользовательском классе. Изолировать данные от всех прямых манипуляций с любого другого объекта. Проверьте все входы в данные перед фиксацией.
Звучит как много работы, и это так. Это кажется излишним для небольшого проекта, и во многих случаях это так. Однако, если вы приобретете эту привычку раньше, вы очень быстро получите большие дивиденды, поскольку ваши приложения становятся все сложнее.