如何在ios中将变量从一个控制器传递到另一个控制器?

时间:2012-12-26 13:50:53

标签: iphone objective-c ios

我有一个带变量的控制器,如

NSString *str;

在同一个控制器中,我在字符串userId中分配str

我需要在另一个控制器上方userId以显示用户数据。

我应该如何在另一个控制器中获得userId的值?

以下是我的代码:

MainViewController.h

@property (nonatomatic) NSString *str;

MainViewController.m

@synthesize str;

str = 1;

现在在FirstViewController.h

@property(nonatomatic, retain) MainViewController *mainCon;

FirstViewController.m

@synthesize mainCon;

NSLog(@"user id is %@", mainCon.str);

在日志中我得到空值。

4 个答案:

答案 0 :(得分:2)

你最好的选择是[prepareForSegue]方法

在该方法中我通常会有类似

的内容
if ([segue.identifier isEqualToString@"segueName"]){
    //I use this if statement to check which segue I am performing, if I have multiple
    //segues from a single view controller
    FirstVc *newViewController = segue.destinationViewController;
    newViewController.str = self.str;
}

这会将主VC中的字符串传递给新VC。这是假设您的转换在Interface Builder中布局或以某种方式使您可以访问segue和标识符

答案 1 :(得分:0)

在MainVC中获取一个属性并从FirstVC传递值然后它将适合您。

以下代码必须在MainVC

@property (strong, nonatomic) NSString *str; 
@synthesize str;
在FirstVC中

MainVC * vc = [[MainVC alloc]init];
vc.str = @"test";

答案 2 :(得分:0)

<强>步骤1:

您必须将 viewcontroller 类创建为常量

第2步:

您可以在 Constanst 类中删除 .m 文件

<强>步骤3:

您必须在 Projectname_Prefix.pch 中导入 Constants.h ,这将是其他资源文件夹中的xcode。现在,Constant类将充当全局类。

<强>步骤4:

现在,您可以在 Constants.h 中声明变量。在 Constants.h 中声明的变量将充当全局变量。你可以在任何地方访问它。

答案 3 :(得分:0)

SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
secondViewController.str1 = str;
[self.navigationController pushViewController:secondViewController animated:YES];

这是一种更快捷,更轻松的解决方案。