2013-11-21 2 views
-5

Можно ли отправлять данные с одного ViewController на другой ViewController, где второй ViewController встроен в контроллер навигации? (и наоборот)Передача данных в другой VC, встроенный в контроллер навигации

ПРИМЕЧАНИЕ: извините, что я пропустил, должен был перечислить более подробную информацию. Проблема здесь в том, что структура приложения выглядит следующим образом: ViewControllerOne> UINvaigationController> ViewControllerTwo. Поэтому я хочу передать данные в ViewControllerTwo. я попытался передать его через PrepareForSegue, но я получаю эту ошибку:

-[UINavigationController setString:]: unrecognized selector sent to instance 0x98b71c0

Вот код:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    VCC *vc2 = (VCC*)segue.identifier; 
    vc2.string = @"something"; 
} 
+0

Offcource это возможно. – Smita

+0

как? :) какой-нибудь намек? – user1938695

+0

Возможный дубликат [Передача данных между контрольными контроллерами] (http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

ответ

1

Пример для передачи данных в вашем случае это:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

if ([segue.identifier isEqualToString:@"segueName"]) { 

    SecondClassName *destTableViewController = [[segue.destinationViewController viewControllers] objectAtIndex: 0]; 
    destTableViewController.yourDataInSecondClass=yourDataInFirstClass; 

}} 

Care: Вы должны дать имя в Segue, который соединяет первый VC с Навигационный контроллер и изменить segueName в приведенном выше с кодом это имя.

метод prepareForSegue вызывается собственными каждый раз, когда вы выбираете изменение VC.

+0

спасибо. Я попробовал, это не сработало для моего дела. Пожалуйста, см. Примечание в моем вопросе, который я только что добавил. – user1938695

+0

Можете ли вы добавить свой пост и добавить код? – hoya21

+0

хорошо я сделал это. – user1938695

0

Ofcourse. Сохраните ссылку viewcontroller где-нибудь (не лучшее решение). Например, в AppDelegate, [[UIApplication sharedApplication] delegate] .viewController1 и [[UIApplication sharedApplication] delegate] .viewController2

Это зависит от вашей структуры, как получить viewcontrollers, но это не сложно.

Чтобы получить все viewcontrollers внутри navigationController: self.navigationController.viewControllers. Он возвращает NSArray с ViewControllers.

+0

Это так плохо :) – Retterdesdialogs

+0

Да, первый ответ плох, это своего рода зависит от структуры проекта. –

0

На самом деле есть много способов для этого запроса -

Решение одного из них -

В вашем FirstViewController -

На мероприятии UIButton -

SecondViewController *secondViewController = [[SecondViewController alloc] init]; 
secondViewController.stringForPassing = @"PassString"; 
[self.navigationController pushViewController:secondViewController animated:YES]; 

В SecondViewController. h

@property (nonatomic,copy)NSString *stringForPassing; 

В SecondViewController.m

@synthesize stringForPassing; 

Теперь вы можете получить доступ к stringForPassing в SecondViewController.

Это поможет вам. Заранее спасибо.

+0

Это не работает, если у вас уже есть существующий secondViewController, потому что с этим вы создаете новый экземпляр SecondViewController – Retterdesdialogs

+0

Спасибо. Я знаю этот способ, и я сделал что-то подобное (так как я использую segues), я взял segue.destination и создал свойство второй VC, однако я получаю сообщение об ошибке, что я отправляю экземпляр в UINavigationController вместо адресата Vc. Примечание: есть контроллер UINavigation между первым и вторым VC – user1938695

+1

@Retterdesdialogs и user1938695 - Спасибо за ответ. Я отправлю еще один. :) – Smita

0

Вы можете просто использовать свойства для передачи данных между контроллерами.

скажем, у вас есть 2 Viewcontrollers, FirstViewController & SecondViewController.и вы хотите, чтобы отправить строку @ «привет мир» в SecondViewController

затем

1. create a @property(nonatomic,retain) NSString * nameStr ; in SecondViewController 

2. synthesize it . 

3. suppose your navigating to secondViewController on click of a button . 

-(void) onButtonClicked 
{ 
    SecondViewController * secondVC = [[SecondViewController alloc] init]; 

    secondVC.nameStr = @"hello , world"; 

    [self.navigationController pushToViewController:secondVc]; 
} 

теперь вы можете получить значение в SecondViewController по телефону self.nameStr

+0

Да, но значение нового экземпляра SecondViewController. Это не работает, чтобы передать значение между двумя существующими контроллерами. – Retterdesdialogs

+0

Вы используете раскадровки? –

+0

yes im using раскадровки – user1938695

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