Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将数据从视图控制器传递到第一个详图控制器,然后再传递到第二个详图控制器_Ios_Uiviewcontroller_Controller - Fatal编程技术网

Ios 将数据从视图控制器传递到第一个详图控制器,然后再传递到第二个详图控制器

Ios 将数据从视图控制器传递到第一个详图控制器,然后再传递到第二个详图控制器,ios,uiviewcontroller,controller,Ios,Uiviewcontroller,Controller,在stackoverflow上发布我的第一个问题!希望我的问题很清楚,在这里 我在第一视图控制器中嵌入了一个导航控制器,该控制器具有一个表视图。从表视图中,我有一个序列,它推送到第一个细节控制器。一切正常,segue将数据传递到第一个细节控制器,但是我想再次从按钮推到第二个细节控制器 故事板中的布局如下所示 我设置了第二个细节控制器,并通过第一个细节控制器上的按钮按下。 但是,我不知道如何将数组中的数据传递给第二个细节控制器。我添加了一个NSLog行以查看传递的内容,调试面板正在输出“(null

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

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

故事板中的布局如下所示

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

以下是名为ColorBookViewController的.m第一个视图控制器中的viewdidload和segue代码:

- (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];
       }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"This is...%@", color.name);
    self.nameLabel.text = color.name;
    self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"

@interface SecondDetailViewController : UIViewController

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

@end
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = color.name;
    NSLog(@"This is...%@", color.spanishname);
    self.spanishnameLabel.text = color.spanishname;
}
- (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 
        }
}
以下是从名为ColorDetailController的第一个细节控制器的.m加载的视图:

- (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];
       }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"This is...%@", color.name);
    self.nameLabel.text = color.name;
    self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"

@interface SecondDetailViewController : UIViewController

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

@end
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = color.name;
    NSLog(@"This is...%@", color.spanishname);
    self.spanishnameLabel.text = color.spanishname;
}
- (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 
        }
}
第二个DetailController的My.h:

- (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];
       }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"This is...%@", color.name);
    self.nameLabel.text = color.name;
    self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"

@interface SecondDetailViewController : UIViewController

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

@end
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = color.name;
    NSLog(@"This is...%@", color.spanishname);
    self.spanishnameLabel.text = color.spanishname;
}
- (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 
        }
}
该应用程序在模拟器中运行良好,但我得到了第二个细节控制器的空白屏幕,并且我从NSLog中得到了“null”结果(@“This…%@”,color.spanishname)

关于segue为什么传递并保持第一个细节视图而不是第二个细节视图的实例,有什么建议吗?还是我遗漏了一些更基本的东西?我尝试在第一个细节控制器上设置第二个segue,NSLog生成正确的结果(西班牙语中的颜色名称),但我不确定如何将其传递到第二个细节控制器:

- (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];
       }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"This is...%@", color.name);
    self.nameLabel.text = color.name;
    self.hexnumberLabel.text = color.hexnumber;
}
#import <UIKit/UIKit.h>
#import "Color.h"

@interface SecondDetailViewController : UIViewController

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

@end
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = color.name;
    NSLog(@"This is...%@", color.spanishname);
    self.spanishnameLabel.text = color.spanishname;
}
- (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 
        }
}
感谢您的帮助或见解


要将数据传递到第二个ViewController,只需执行与第一个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;
   }
}

现在,在
SecondDetailViewController
viewDidLoad
中,您可以正确设置标签,如在
self.spanishnameLabel.text=color.spanishname

将颜色数组中的对象传递到第二个VC中的
Color
。什么是
颜色