关于iphone:iOS开发 – 如何将字符串obj从一个类传递给另一个类?

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;

确保第二个视图控制器管理字符串的内存(通常在控制器的dealloc方法中使用release消息,假设您的属性是用retain定义的)。

第二个选项是在应用程序委托中保留属性,或者另一个为应用程序管理数据的单例。但是第一种方法更轻一些。


如果我理解正确,您需要的是在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