objective-c - 访问另一个类中 RootViewController 的数据成员

标签 objective-c cocoa cocoa-touch macos

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

最佳答案

你需要两件事:

  1. RootViewController 的引用
  2. 一种从 RootViewController 中获取变量的方法。

在每个应用程序(很可能)有一个 RootViewController 的情况下,在应用程序的委托(delegate)中保留对该对象的引用是有意义的。您可以像这样获取应用委托(delegate):

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

在您的应用程序委托(delegate)类中,您应该添加一个名为 rootViewController 的属性,该属性公开您的 RootViewController 对象。现在你可以这样写了

RootViewController *theRootViewController = appDelegate.rootViewController;

这满足了第一个要求。现在,为了访问 View Controller 拥有的对象,您需要向 RootViewController 添加一个属性。您并没有真正说明对象是什么或做什么,所以我们就称它为 myMutableArray。在 RootViewController 上创建一个具有该名称的 readonly 属性,现在您将能够编写如下内容:

NSMutableArray *myArray = theRootViewController.myMutableArray;

这会让你做你想做的事。

不过,我必须警告你:公开一个 NSMutableArray 通常不是一个好主意。原因是,如果您更改了该数组的内容,RootViewController 将不知道您已完成此操作。因此,如果您要创建一个主从 View ,您的 RootViewController 将不知道您添加了一个新对象。

如果您编写让 RootViewController 在内部修改数组的方法会更好。例如,您可以使用名为 addFooObject: 的方法来管理数组。然后 View Controller 就会知道你对它做了什么。对于访问,您可以非常轻松地从您的属性中返回可变数组的不可变、自动释放的副本。

关于objective-c - 访问另一个类中 RootViewController 的数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696360/

相关文章:

cocoa - 弹出 NSColorPanel?

objective-c - 我关闭的 NSWindow 在哪里?

objective-c - 在 NSTextView 中为行片段重绘单个矩形

php - key 中的 AES-128 UTF-8 字符 (iOS ↔ PHP)

iphone - 如何判断按下了哪个 MKPinAnnotation?

ios - 为什么 MKOverlayRenderer 上的 drawRect 很慢

ios - 如何将 UIGestureRecognizer 限制为特定的 UIView?

cocoa-touch - 如何用十分之一秒创建倒计时?

缩放 Paint 应用程序的 OpenGL ES 内容时 iPhone 像素失真

iOS:在单独的 UIView 中获取约束后的 SubView 宽度