如何正确地将NSArray / NSMutableArray从一个UIViewController传递到另一个UIViewController

时间:2010-04-15 20:44:35

标签: iphone uiviewcontroller nsarray

我正在研究的iPhone应用程序正在定期终止......我感觉这是因为我在多个视图控制器中访问共享的NSArray。所以...

在几个ViewControllers中传递NSArray / NSMutableArray的最佳方法是什么...所有这些都可以修改和/或将其设置为nil或其他什么?

由于

2 个答案:

答案 0 :(得分:3)

一般来说,有两种方法。

在第一种方法中,当您实例化下一个视图控制器时,可以将数组属性设置为从当前(即将成为上一个或父级)视图控制器“继承”:

MyNextViewController *_myNextViewController = [[MyNextViewController alloc] initWithNibName:@"MyNextViewController" bundle:nil];
_myNextViewController.myViewControllerArray = self.myViewControllerArray;
...

在第二种方法中,您可以在应用程序委托中创建myAppDelegateArray属性,在应用程序初始化时实例化数组(或在其他地方按需实例化)。

然后,您可以从任何类(包括视图控制器)调用此属性的getter。

例如,在MyNextViewController的实例中,您可能有一个名为myViewControllerArray的属性,您可以按如下方式设置:

self.myViewControllerArray = [UIAppDelegate myAppDelegateArray]; 

您可以在应用程序常量文件的某处添加#define语句,例如:

#define UIAppDelegate ((MyAppDelegate *)[UIApplication sharedApplication].delegate)
如果您愿意,可以

使用完整的[UIApplication sharedApplication].delegate来电。

作为一种通用方法,人们似乎更喜欢应用委托代理方法,因为它分散了对所需属性的访问权限。

使用此方法,如果重新排列视图控制器或将新视图控制器插入VC层次结构,则无需调试从父视图控制器继承的子视图控制器属性,因为始终可以从应用程序委托中获取引用

答案 1 :(得分:0)

你可能没有保留它,它会被取消分配,你试图再次访问它。尝试发送[myArray retain]你正在使用它(在每个控制器中),以及[myArray release]完成后