Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Iphone 如何在两个不同的视图控制器之间传递信息?_Iphone_Objective C_Xcode_Viewcontroller - Fatal编程技术网

Iphone 如何在两个不同的视图控制器之间传递信息?

Iphone 如何在两个不同的视图控制器之间传递信息?,iphone,objective-c,xcode,viewcontroller,Iphone,Objective C,Xcode,Viewcontroller,这是一个简单的问题: 我有两个不同的视图控制器,每个都有自己的数据存储在.m文件中。 我想获取一个值,例如,在ViewController1中声明的整数值(int I=3;),并将其传递给ViewController2,这样我就可以在第二个视图控制器中使用该值 有人能告诉我怎么做吗?如果您将ViewController1嵌入到中,这是一个非常常见的用例。在ViewController1内部,将此代码添加到要显示ViewController2的位置(例如在操作中): ViewController2

这是一个简单的问题:

我有两个不同的视图控制器,每个都有自己的数据存储在.m文件中。 我想获取一个值,例如,在ViewController1中声明的整数值(
int I=3;
),并将其传递给ViewController2,这样我就可以在第二个视图控制器中使用该值


有人能告诉我怎么做吗?

如果您将ViewController1嵌入到中,这是一个非常常见的用例。在ViewController1内部,将此代码添加到要显示ViewController2的位置(例如在操作中):

ViewController2*controller=[[ViewController2 alloc]initWithNibName:bundle:nil];
[控制器设置数据:];
[self.navigationController pushViewController:控制器已设置动画:是];
[控制器释放];

导航控制器将处理其余部分。

使用该值初始化新的视图控制器

- (id)initWithValue:(int)someValue {
    if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
        myValue = someValue;
    }
    return self;
}
然后从您的其他视图控制器(假设此其他视图控制器由
UINavigationController
所有)

和/或要在初始化后执行此操作,请创建允许您设置的方法或属性

- (void)setSomeValue:(int)newValue {
    myValue = newValue;
}
然后


2014年编辑-万一有人碰到这件事,别听我说。“更好的方法”确实是最好的方法。

好方法-在ViewController2上创建自己的initWithI方法

更好的方法-像往常一样创建ViewController2,然后将该值设置为属性


最好的方法-这是一种代码味道,您将数据与ViewController紧密耦合。改用CoreData或NSUserDefaults。

NSUserDefaults听起来是最简单的解决方案。
- (void)showNextViewControler {
    MyViewController *vc = [[[MyViewController alloc] initWithValue:someValue] autorelease]
    [self.navigationController pushViewController:vc animated:YES];
}
- (void)setSomeValue:(int)newValue {
    myValue = newValue;
}
- (void)showNextViewControler {
    MyViewController *vc = [[[MyViewController alloc] initWithNibName:@"Foo" bundle:nil] autorelease]
    [vc setValue:someValue]
    [self.navigationController pushViewController:vc animated:YES];
}