2011-11-15 41 views
3

我有一个RootViewController和一个DetailViewController,我试图将一个NSMutableArray从rootView传递给detailView。我创建了DetailViewController内RootViewController的的对象,并访问它像下面iPhone编程 - 在视图控制器之间传递NSMutableArray

RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 

detailViewArray = [root.rootViewArray copy]; 

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

问题:我也不太清楚为什么它仍然无法正常工作。我曾在互联网上尝试过很多解决方案,但对我而言并不合适。根数组的属性是非原子,保留这是不是有什么问题?我是否需要将其更改为某种方式,或者我所遵循的方法是不正确的..请如果有人能帮忙!

回答

3

如果您在DetailViewController内部分配/ init 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]; 

然后,每个视图可以设置并从模型的相同(单)实例读取数据。

要选择哪个?如果许多视图共享相同的数据,则该模型更好。一个委托是适合夫妇观点与每个通过回调沟通。

+0

即使有另一种方式来传递数组。 MyViewController mvc = [[MYViewController alloc] initWithNibName:@“MYViewController”bundle:[NSBundle mainBundler]]; [mvc getDataArray:]; – Mrunal

+0

@mrunal - 这正是苹果推荐代表的原因。拥有一个视图直接在另一个视图上设置数据会创建视图的紧密耦合。 – bryanmac

0

即使有另一种方式来传递数组。

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

[mvc getDataArray:<pass your array>]; 

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

这会设置一个dataArray中属性第一那么它将视图控制器推到MyViewController类。

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

+0

如果你想直接传递它,你应该使用代表。直接设置会创建视图的紧密耦合。 – bryanmac

+0

@bryanmac:哦,我对代表们没有太多想法。你能给一个例子提供代码吗? – Mrunal

+0

在我上面的答案中有几个链接。 – bryanmac

相关问题