2013-08-26 4 views
2

Публикация моего первого вопроса здесь, в stackoverflow! Надеюсь, мой вопрос ясен, вот он ...Передача данных с контроллера просмотра на первый контроллер детали, а затем на второй контроллер детализации

У меня есть контроллер навигации, встроенный в контроллер первого вида, который имеет вид таблицы. Из представления таблицы у меня есть segue, который подталкивает к первому контроллеру детали. Все работает нормально, segue передает данные в первый контроллер детали, однако я хотел бы снова нажать кнопку на второй контроллер детализации.

Раскладка в раскадровке выглядит следующим образом Image of storyboard

я устанавливаю вверх вторую деталь контроллер и нажат в том, что с помощью кнопки на Первом Detail Controller. Однако я не могу понять, как передать данные, которые у меня есть в массиве, во второй контроллер детализации. Я добавил строку NSLog, чтобы увидеть, что передается вместе, и панель отладки outputing «(нуль)»

Вот мой viewdidload и непосредственно перейти код из .m Первый взгляд контроллер с именем ColorBookViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    Color *color1 = [Color new]; 
    color1.name = @"Red"; 
    color1.hexnumber = @"FF0000"; 
    color1.spanishname [email protected]"Rojo"; 

    Color *color2 = [Color new]; 
    color2.name = @"Green"; 
    color2.hexnumber = @"00FF00"; 
    color2.spanishname [email protected]"Verde"; 


    Color *color3 = [Color new]; 
    color3.name = @"Blue"; 
    color3.hexnumber = @"0000FF"; 
    color3.spanishname = @"Azul"; 

    colors = [NSArray arrayWithObjects: color1,color2,color3, nil]; 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
    if ([segue.identifier isEqualToString:@"showColorDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     ColorDetailViewController *destViewController = segue.destinationViewController; 
     destViewController.color = [colors objectAtIndex:indexPath.row]; 
     } 
} 

Вот вид сделал груз из .m Первого Detail контроллера имени ColorDetailController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"This is...%@", color.name); 
    self.nameLabel.text = color.name; 
    self.hexnumberLabel.text = color.hexnumber; 
} 

Мой .h для SecondDetailController:

#import <UIKit/UIKit.h> 
#import "Color.h" 

@interface SecondDetailViewController : UIViewController 

@property (nonatomic,weak) IBOutlet UILabel *spanishnameLabel; 
@property (nonatomic, strong) Color *color; 

@end 

Вот вид сделал груз из .m Второго Detail контроллера имени SecondDetailController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.title = color.name; 
    NSLog(@"This is...%@", color.spanishname); 
    self.spanishnameLabel.text = color.spanishname; 
} 

приложения прекрасно работает в тренажере, но я получаю пустой экран для второго Detail контроллера и я получаю «нулевой» результат из NSLog (@ «Это ...% @», color.spanishname);

Любые предложения относительно того, почему segue проходит и содержит экземпляр для первого подробного просмотра, но не второго подробного представления? Или я пропустил здесь нечто более фундаментальное? Я попытался создать второй SEGUE на Первом Detail Controller и NSLog производит правильный результат (название цвета на испанском языке), но я не знаю, как я бы передать это на вторую Detail контроллера:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showMoreDetail"]) { 

     NSLog(@"This is... %@",color.spanishname); //works fine 
     self.spanishnameLabel.text = color.spanishname; //throws error 
     } 
} 

Спасибо за любую помощь или прозрение!

Download the complete project here

+0

Вы передаете объект в массиве цветов для ' Цвет "во втором ВК. Что такое «Цвет»? – CaptJak

ответ

0

Чтобы передать данные на второй ViewController, просто делать то же самое, как вы делали в первом ViewController: передать ссылку из Color объекта в Segue.

В SecondDetailViewController у вас уже есть свойство цвета. Вам просто нужно установить это свойство с тем же Color объектом, который был выбран в вашем ColorBookViewController. Поскольку у вас уже есть эта ссылка в ColorDetailViewController, просто передайте ее прямо на SecondDetailViewController через segue.

Внутри вашего ColorDetailViewController:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"showMoreDetail"]) { 
     SecondDetailViewController *destViewController = segue.destinationViewController; 
     destViewController.color = self.color; 
    } 
} 

Теперь в viewDidLoad в SecondDetailViewController, вы могли бы установить метки правильно, как в self.spanishnameLabel.text = color.spanishname;

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