2009-07-23 5 views
1

Я создаю пользовательский ViewController. Этот VC должен загрузить некоторые данные, которые известны в случае, когда он создает его, и подталкивает его к вершине NavigationController, из которого он будет частью.Cocoa Touch UIViewController Свойства и класс дизайна

Вопрос в том, как передать данные из представления, которое обрабатывает создание настраиваемого ViewController в этом пользовательском ViewController.

Я думал о четырех возможных вариантах, и я надеялся получить отзывы о том, почему каждый из них хорош или нет для этой функции.

1) Открыть публичные свойства в пользовательском ViewController и установить элементы интерфейса в представлении на основе этих свойств в - (void) ViewDidLoad.

2) Экспозиция самих элементов пользовательского интерфейса и установка их .text/.image /. Любых атрибутов при создании ViewController.

3) Создать пользовательский конструктор для настраиваемого представления и передать значения мне нужно настроить элементы пользовательского интерфейса

4) Создание пользовательской модели, обе точки зрения имеют доступ, установить данные до CustomView создается/перемещается и получает доступ к этим данным в событии ViewDidLoad.

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

Кроме того, на случай, если кто-то заботится, я использую класс CS193p Стэнфорда на iTunes U и Mark/Lamarche «Начало разработки iPhone», чтобы научить меня какао для iPhone. Я работаю над приложением с NavigationController и несколькими ViewControllers (Присутствие 1, если вы знакомы с 193p).

ответ

1

Ну, я считаю, что есть достоинства & недостатки для каждого из этих методов в зависимости от ваших требований ... часто для этого потребуется некоторая комбинация подходов. Я считаю, что самый распространенный, для меня, так или иначе, - это сделать что-то вроде этого, где вы даете ему достаточно, чтобы начать.

MyViewController *vc = [[MyViewController alloc] init]; // (or initWithNibName:bundle:) 
// transfer vc values here 
vc.value1 = aValue; 
vc.value2 = anotherValue; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

После того, как вы создали экземпляр вашего контроллера, у вас есть возможность передать ему объекты. Say MyViewController - это подробный вид, тогда вы должны указать ему объект, на котором будут отображаться детали. Или, если это табличный вид, вы можете дать ему NSArray, который понадобится для отображения. Затем в viewDidLoad или awakeFromNib или awakeFromCoder, или ... вы можете заполнить представление ... так сказать.

1

# 1 это хорошо, с или без # 3 (эти два не являются взаимоисключающими)

# 4 мой предпочтительным решением. Например, если бы я имел UserViewController, я хотел бы также, вероятно, чтобы иметь объект пользователя и создать его таким образом:

User *user = [self.users objectAtIndex:someIndex]; 
UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease]; 

# 2 не является хорошей идеей. Объекты не должны обращаться к элементам пользовательского интерфейса других объектов. Большая проблема возникает из-за этого, когда вы решили изменить свой интерфейс вокруг (и вы это сделаете).

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