2010-04-15 3 views
2

Это простой вопрос:Как я могу передавать информацию между двумя различными контроллерами View?

У меня есть 2 разных контроллера вида, и у каждого есть свои данные, хранящиеся в его файле .m. Я хочу взять значение, например целочисленное значение (int i=3;), которое объявлено в ViewController1 и передать его в ViewController2, поэтому я смогу использовать это значение во втором контроллере представления.

Может ли кто-нибудь рассказать мне, как это сделать?

ответ

2

2014 Edit - в случае, если кто-то натыкается на это, не слушайте меня. «Лучший способ» - это лучший способ.

хороший способ - создать свой собственный метод initWithI на ViewController2

лучший способ - создать ViewController2 как обычно, а затем установите значение в качестве свойства.

Лучший способ - это запах кода, вы плотно связываете данные с ViewController. Вместо этого используйте CoreData или NSUserDefaults.

+0

NSUserDefaults звучит как самое простое решение. – Sagiftw

1

Если вы встраиваете ViewController1 в UINavigationController, это довольно распространенный прецедент. Внутри ViewController1, добавьте этот код, где вы хотите, чтобы показать ViewController2 (в действии, например):

ViewController2 *controller = [[ViewController2 alloc] initWithNibName:<nibName> bundle:nil]; 
[controller setData:<your shared data>]; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

Контроллер навигации позаботится об остальном.

1

Инициализируйте новый контроллер вида со значением.

- (id)initWithValue:(int)someValue { 
    if (self = [super initWithNibName:@"MyViewController" bundle:nil]) { 
     myValue = someValue; 
    } 
    return self; 
} 

Затем с другого контроллера представления (при условии, этот другой контроллер зрения принадлежит UINavigationController)

- (void)showNextViewControler { 
    MyViewController *vc = [[[MyViewController alloc] initWithValue:someValue] autorelease] 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

И/или сделать это после инициализации, создать метод или свойство, которое позволяет вам установить его.

- (void)setSomeValue:(int)newValue { 
    myValue = newValue; 
} 

Тогда

- (void)showNextViewControler { 
    MyViewController *vc = [[[MyViewController alloc] initWithNibName:@"Foo" bundle:nil] autorelease] 
    [vc setValue:someValue] 
    [self.navigationController pushViewController:vc animated:YES]; 
} 
Смежные вопросы