如何从AppRlegate所拥有的类访问AppDelegate上的属性?

时间:2015-07-07 16:17:22

标签: objective-c macos cocoa

我正在编写一个简单的OS X应用程序,到目前为止结构如下:

  • 主要业务逻辑位于AppDelegate.m
  • ViewControllers拥有的AppDelegateAppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate]; delegate.someProperty = someValue; 并在窗口中显示

我有时需要从ViewControllers访问AppDelegate上的属性,我这样做:

AppDelegate

这“感觉”很丑陋。这是一个合适的模式还是真的很蠢?

我提出的两种替代架构是:

  1. 使用委托并在VC中定义某种“UI委托”协议并使AppDelegate符合它
  2. 让VC发布AppDelegate收听的通知
  3. 第一个感觉纠结和肮脏,第二个感觉不可靠。

    这里适当的模式是什么? apply plugin: 'jetty'拥有的VC如何访问其属性?

2 个答案:

答案 0 :(得分:1)

试试这个

AppDelegate *app = [NSApp delegate];

而不是这个

AppDelegate *delegate = (AppDelegate *)[[NSApplication sharedApplication] delegate];

答案 1 :(得分:0)

您可以在NSObject上定义一个类别,该类别允许您从项目中的任何对象获取AppDelegate的实例。

@interface NSObject (AppDelegate)

- (AppDelegate *)appDelegate;

@end

然后,您可以在项目.pch文件中包含该类别,以便它可以在任何地方使用。