在另一个类中访问RootViewController的数据成员

时间:2009-03-30 08:04:58

标签: objective-c cocoa cocoa-touch macos

我正在使用Objective-C开发iPhone应用程序。我想访问另一个类中RootViewController类的NSMutableArray类型的数据成员。我试着让数组静态。但我想要一个非静态数组。我如何实现这一目标?

2 个答案:

答案 0 :(得分:8)

你需要两件事:

  1. RootViewController
  2. 的引用
  3. RootViewController获取变量的方法。
  4. 在每个应用程序(很可能)有一个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]