我正在使用Objective-C开发一个iPhone应用程序.我想访问另一个类中RootViewController类的NSMutableArray类型的数据成员.我试着让数组静态.但我想要一个非静态数组.我该如何实现这一目标?
你需要两件事:
参考 RootViewController
从变量中获取变量的方法RootViewController
.
在RootViewController
每个应用程序(最有可能)一个应用程序的情况下,在应用程序的委托中保留对该对象的引用是有意义的.您可以像这样获得应用程序委托:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
在你的应用委托类中,你应该添加一个名为rootViewController
暴露你的RootViewController
对象的属性.现在你可以写出类似的东西
RootViewController *theRootViewController = appDelegate.rootViewController;
这满足了第一个要求.现在,为了访问视图控制器拥有的对象,您需要添加属性RootViewController
.你没有真正说出对象是什么或做了什么,所以让我们来称呼它myMutableArray
.创建一个readonly
具有该名称的属性RootViewController
,现在您将能够编写如下内容:
NSMutableArray *myArray = theRootViewController.myMutableArray;
这将让你做你想做的事.
但是我必须警告你:暴露一个NSMutableArray
通常不是一个好主意.原因是如果你改变那个数组的内容,RootViewController
就不会知道你已经完成了这个.因此,如果您正在创建一个主 - 详细视图,那么您RootViewController
就不会知道您添加了一个新对象.
如果你编写允许RootViewController
在内部修改数组的方法会更好.例如,您可以使用一个名为addFooObject:
管理数组的方法.然后视图控制器将知道你对它做了什么.对于访问,您可以非常轻松地从属性中返回可变数组的不可变,自动释放的副本.
您还可以在一行代码中访问使用SharedApplication的根视图控制器:
[[[UIApplication sharedApplication] keyWindow] rootViewController]