我有一个RootViewController和一个DetailViewController,我试图将NSMutableArray从rootView传递给detailView。我在DetailViewController中创建了RootViewController的一个对象,并像下面的
一样访问它RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
detailViewArray = [root.rootViewArray copy];
注意:两个数组都在.h文件中声明;合成,然后分配和初始化 array = [[NSMutableArray alloc] init];
问题:我不太清楚为什么它仍然不起作用。我在互联网上尝试过很多解决方案,但对我来说并不是很有效。根数组的属性是非原子,保留这有什么问题吗?我是否需要将其更改为某些内容,或者我所遵循的方法是不正确的......如果有人可以提供帮助,请等一下!
答案 0 :(得分:3)
如果在DetailViewController中分配/初始化RootViewController,则需要创建RootViewController的另一个实例。您没有获得rootViewController的相同实例(包含数据)。
也就是说,即使将viewController的引用传递给另一个viewController,然后查看它的数据也有点糟糕。它在视图之间创建紧密耦合。
相反,如果您需要获取数据,请考虑使用委托在视图之间进行通信。
What exactly does delegate do in xcode ios project?
教程:
另一个选择是创建共享模型(读取模型视图控制器模式)。在该模式中通常通过获取模型的单例实例来创建模型并共享数据:
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),那么它的范围将在整个应用程序范围内保持不变。