2

在stackoverflow上发布我的第一个问题!希望我的问题很清楚,在这里...

我有一个嵌入在具有表格视图的第一个视图控制器中的导航控制器。从表视图中,我有一个推送到第一个细节控制器的 segue。一切正常,segue 将数据传递给第一个细节控制器,但是我想再次从一个按钮推送到第二个细节控制器。

情节提要中的布局看起来像这样情节提要的图像

我设置了第二个细节控制器并从第一个细节控制器上的一个按钮推到那个。但是我不知道如何将数组中的数据传递给第二个细节控制器。我添加了一个 NSLog 行来查看正在传递的内容,并且调试面板正在输出“ (null)

这是我的 viewdidload 和 segue 代码,来自名为 ColorBookViewController 的 .m First View Controller:

- (void)viewDidLoad
{
    [super viewDidLoad];

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

    Color *color2 = [Color new];
    color2.name = @"Green";
    color2.hexnumber = @"00FF00";
    color2.spanishname =@"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(@"This is...%@", color.spanishname);

关于为什么 segue 通过并保留第一个详细视图而不是第二个详细视图的实例的任何建议?还是我在这里遗漏了一些更基本的东西?我尝试在第一个细节控制器上设置第二个 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 
        }
}

感谢您的任何帮助或见解!

在此处下载完整的项目

4

1 回答 1

0

要将数据传递给第二个 ViewController,只需执行与第一个 ViewController 中完全相同的操作:Color在 segue 中传递对象的引用。

在 中SecondDetailViewController,您已经有一个颜色属性。您只需使用ColorColorBookViewController. 由于您已经在 中拥有此引用,因此ColorDetailViewController只需SecondDetailViewController通过 segue 将其直接传递给 。

在你的内部ColorDetailViewController

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

现在,在viewDidLoadSecondDetailViewController,您将能够正确设置标签,例如self.spanishnameLabel.text = color.spanishname;

于 2013-08-26T03:14:31.147 回答