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