Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.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-为什么可以';我不能用同样的方法使用pushViewController两次吗?_Ios_Objective C_Xcode - Fatal编程技术网

iOS-为什么可以';我不能用同样的方法使用pushViewController两次吗?

iOS-为什么可以';我不能用同样的方法使用pushViewController两次吗?,ios,objective-c,xcode,Ios,Objective C,Xcode,我目前有三个视图控制器:ViewController1 ViewController2和ViewController3。我试图在ViewController1和ViewController2之间以及ViewController2和ViewController3之间传递数据 例如,要将数据user从ViewController1传递到ViewController2我使用: ViewController2 *vc2 = [[ViewController2 alloc]init]; vc2.user

我目前有三个视图控制器:
ViewController1 ViewController2
ViewController3
。我试图在
ViewController1
ViewController2
之间以及
ViewController2
ViewController3
之间传递数据

例如,要将数据
user
ViewController1
传递到
ViewController2
我使用:

ViewController2 *vc2 = [[ViewController2 alloc]init];
vc2.user = _user;    

[self.navigationController pushViewController:vc2 animated:YES];
但是,如果我试图从
ViewController2
ViewController3
传递
user
,我无法使用上述方法…我只会在屏幕上显示一个黑色的视图控制器

相反,我尝试了这个方法,效果很好:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];

vc3.user = _user;

[self.navigationController pushViewController:vc3 animated:YES]; 
为什么我不能使用与vc1->vc2相同的方法

ViewController3 *vc3 = [[ViewController3 alloc]init];
vc3.user = _user;

[self.navigationController pushViewController:vc3 animated:YES];

之所以会出现黑屏,是因为您使用的实例化方法

 ViewController2 *vc2 = [[ViewController2 alloc]init];
这成功地创建了一个视图控制器,但遗憾的是,它没有视图(您没有给它视图)。导航控制器将无视图视图控制器添加到其堆栈中,从而为上一个控制器设置动画。由于导航控制器的默认背景色为黑色,并且俯视图控制器不存在,因此您正体验应该显示的内容:无

第二种方法之所以有效,是因为故事板正在实例化视图控制器,但这次它有一个实际视图:

ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"];

首先,正如@Wayne Hartman所说,您必须启动viewController

ViewController2 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"];
vc.user = _user;
[[self navigationController] pushViewController:vc animated:YES];
现在,在
ViewController2
ViewController3
变量中,
user
“必须具有
@属性
@合成

@property(nonatomic, copy) NSString *user;
@synthesize user;
现在,您可以在
ViewController3
中导航,与
ViewController2

ViewController3 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"];
vc.user = user;
[[self navigationController] pushViewController:vc animated:YES];
您可以从
Storyboard>Identity inspector

您可以使用此代码

        NSMutableArray* array = [self.navigationController viewControllers];
        FirstViewController* viewFirst = [array objectAtIndex:0];
        // Get the third / second or any view controller using its order of insertion / push
        // If you know th order then
        ThirdViewController* thirdView = [array objectAtIndex:2];
        thirdView.view.backgroundColor = viewFirst.view.backgroundColor;
如果那不起作用


您可以为您的任务使用
NSNotification

您是否可能输入错误并试图推送导航堆栈上已经存在的视图控制器?这会导致你描述的行为。肯定是打字错误。你能把代码也贴出来吗?@AaronBrager不,我没有!我已经检查了数百次,没有发现任何错误……您确定正确实例化了ViewController3(我的意思是,与您在第二个代码块中尝试的方法不同)?代码您是否发布了显示初始实例化的代码块?@LyndseyScott等等,我如何正确初始化ViewController3?我试过:
ViewController3*vc3=[[ViewController3 alloc]init]