这是一个简单的问题:
我有 2 个不同的视图控制器,每个控制器都有自己的数据存储在其 .m 文件中。我想取一个值,例如,int i=3;
在 ViewController1 中声明的整数值 ( ) 并将其传递给 ViewController2,因此我将能够在第二个视图控制器中使用该值。
谁能告诉我该怎么做?
这是一个简单的问题:
我有 2 个不同的视图控制器,每个控制器都有自己的数据存储在其 .m 文件中。我想取一个值,例如,int i=3;
在 ViewController1 中声明的整数值 ( ) 并将其传递给 ViewController2,因此我将能够在第二个视图控制器中使用该值。
谁能告诉我该怎么做?
2014 年编辑 - 万一有人遇到这种情况,不要听我的。“更好的方式”确实是最好的方式。
好方法 - 在 ViewController2 上创建自己的 initWithI 方法
更好的方法 - 像往常一样创建 ViewController2,然后将值设置为属性。
最佳方式 - 这是一种代码味道,您将数据与 ViewController 紧密耦合。请改用 CoreData 或 NSUserDefaults。
如果您将 ViewController1 嵌入UINavigationController中,这是一个非常常见的用例。在 ViewController1 中,将此代码添加到要显示 ViewController2 的位置(例如在操作中):
ViewController2 *controller = [[ViewController2 alloc] initWithNibName:<nibName> bundle:nil];
[controller setData:<your shared data>];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
导航控制器将负责其余的工作。
用该值初始化新的视图控制器。
- (id)initWithValue:(int)someValue {
if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
myValue = someValue;
}
return self;
}
然后从您的另一个视图控制器(假设这个另一个视图控制器由 a 拥有UINavigationController
)
- (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];
}