iPhone编程 - 在视图控制器之间传递NSMutableArray

时间:2011-11-15 00:46:09

标签: iphone ios cocoa-touch uiviewcontroller nsmutablearray

我有一个RootViewController和一个DetailViewController,我试图将NSMutableArray从rootView传递给detailView。我在DetailViewController中创建了RootViewController的一个对象,并像下面的

一样访问它
RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

detailViewArray = [root.rootViewArray copy];

注意:两个数组都在.h文件中声明;合成,然后分配和初始化 array = [[NSMutableArray alloc] init];

问题:我不太清楚为什么它仍然不起作用。我在互联网上尝试过很多解决方案,但对我来说并不是很有效。根数组的属性是非原子,保留这有什么问题吗?我是否需要将其更改为某些内容,或者我所遵循的方法是不正确的......如果有人可以提供帮助,请等一下!

2 个答案:

答案 0 :(得分:3)

如果在DetailViewController中分配/初始化RootViewController,则需要创建RootViewController的另一个实例。您没有获得rootViewController的相同实例(包含数据)。

也就是说,即使将viewController的引用传递给另一个viewController,然后查看它的数据也有点糟糕。它在视图之间创建紧密耦合。

相反,如果您需要获取数据,请考虑使用委托在视图之间进行通信。

What exactly does delegate do in xcode ios project?

教程:

http://www.theappcodeblog.com/2011/04/15/passing-data-between-views-tutorial-using-a-protocol-delegate-in-your-iphone-app/

另一个选择是创建共享模型(读取模型视图控制器模式)。在该模式中通常通过获取模型的单例实例来创建模型并共享数据:

MyModel *model = [MyModel sharedInstance];

然后,每个视图都可以设置和读取模型的同一(单例)实例中的数据。

选择哪个?如果许多视图共享相同的数据,则模型更好。委托适用于几个视图,通过回调与每个视图进行通信。

答案 1 :(得分:0)

即使有另一种传递数组的方法。

MyViewController mvc = [[MYViewController alloc] initWithNibName:@"MYViewController" bundle:[NSBundle mainBundler]];

[mvc getDataArray:<pass your array>];

[self.navigationController pushViewController:mvc animated:YES];

这里先设置一个 dataArray 属性,然后将视图控制器推送到MyViewController类。

当你非常关心记忆时,这将非常有用。因为如果您使用静态(sharedInstance),那么它的范围将在整个应用程序范围内保持不变。