2013-08-26 64 views
2

在stackoverflow上發佈我的第一個問題!希望我的問題很明確,這裏是...將數據從視圖控制器傳遞到第一個詳細控制器,然後傳遞到第二個詳細控制器

我有一個導航控制器嵌入在具有表格視圖的第一個視圖控制器中。從表格視圖中,我有一個推向第一個細節控制器的細節。一切工作正常,segue傳遞數據到第一個細節控制器,但是我想再次從一個按鈕推到第二個細節控制器。

情節板中的佈局看起來像這樣Image of storyboard

我建立的第二細節控制器和從按鈕推到,關於第一個明細控制器。 但是我無法弄清楚如何將數組中的數據傳遞給第二個細節控制器。我添加了一個的NSLog網上看到正在一起傳遞什麼和調試面板outputing「(空)

這是我的viewDidLoad中,並從.M第一個視圖控制器Segue公司代號爲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]; 
     } 
} 

這裏是查看從第一個明細控制器命名ColorDetailController的.M做負載:

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

我對SecondDetailController .H:

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

@interface SecondDetailViewController : UIViewController 

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

@end 

下面是這個視圖從命名SecondDetailController第二個細節控制器的.M做負載:

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

的應用程序運行在模擬器罰款,但我得到了一個空白屏幕爲第二細節控制器我得到NSLog的「null」結果(@「This is ...%@」,color.spanishname);

關於爲什麼segue通過並持有第一個Detail View而不是第二個Detail View的實例的任何建議?或者我在這裏錯過了更重要的東西?我試圖建立的第一細節控制器第二SEGUE和NSLog的產生正確的結果(在西班牙語中的顏色名稱),但我不知道我怎麼會通過這個到第二個細節控制器:

- (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

你在你的顏色數組'傳遞對象顏色「在第二個VC中。什麼是「顏色」? – CaptJak

回答

0

傳遞數據到第二的ViewController,只是做同樣的事情,你在第一個視圖控制器所做的:通過在SEGUE的Color對象的引用。

SecondDetailViewController中,您已具有顏色屬性。您只需在ColorBookViewController中選擇與此對象相同的Color對象即可設置此屬性。由於您在ColorDetailViewController中已經有此參考,只需通過segue將其直接傳遞給SecondDetailViewController即可。

裏面你ColorDetailViewController:現在

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

,在SecondDetailViewControllerviewDidLoad,你就可以正確設置標籤,就像self.spanishnameLabel.text = color.spanishname;

相關問題