iOS dev - How do I pass a string obj from one class to the other?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Passing Data between View Controllers
我有两个视图控制器,我想从我的应用程序的前一个视图中获取一些信息。例如:
在我的应用程序中,我从第一页转到第二页。根据用户按下的按钮,我想更改第二个屏幕上的信息。最快最简单的方法是什么?我尝试导入类并重新构建,但这会重新创建字符串obj,并且不会保留我想要的信息。
至少有两种可能性:
- 向下一个视图控制器添加属性,执行如下操作
1
2 NewVC *vc = [[NewVC alloc] init]; // or initWithNibName...
[vc setMyInformation:information];
- 创建自定义init方法:
1 NewVC *vc = [[NewVC alloc] initWithMyInformation:information andNibName:@"nibName" bundle:nil]; // well you should get the point...
在第二个("子")视图控制器中,保留字符串的属性(参见第9节)。
当实例化第二个视图控制器时,在将其从第一个视图控制器推送到堆栈之前,请设置字符串属性的值,例如,保留第一个控制器的字符串:
1 | mySecondViewController.infoString = myFirstViewController.infoString; |
确保第二个视图控制器管理字符串的内存(通常在控制器的
第二个选项是在应用程序委托中保留属性,或者另一个为应用程序管理数据的单例。但是第一种方法更轻一些。
如果我理解正确,您需要的是在VC2中创建一个实例变量。然后,当您从VC1创建一个VC2实例时,您可以在显示VC2之前访问该IVAR以分配值等。下面是一个例子:
在viewcontroller2.h文件中:
1 2 3 4 5 6 | @interface ViewController2 { NSString *string2; //create an instance variable } @property (nonatomic, retain) NSString *string2; |
在viewcontroller2.m文件中:
1 2 | @implementation ViewController2 @synthesize string2; |
在viewcontroller1.m文件中:
1 2 3 4 5 6 7 8 9 | @implementation ViewController1 //ViewController2 *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; //one way to instantiate viewController2.string2 = @"whatever string"; //here you assign the value to the instance variable string2 in viewController2 //[self.navigationController pushViewController:childController animated:YES]; //etc. it depend on how you present viewcontroller2 |