【问题标题】:Iphone access a property value from AppDelegateIphone 从 AppDelegate 访问属性值
【发布时间】:2011-03-03 02:10:13
【问题描述】:

如何从 someView Controller 访问 AppDelegate 类的属性值而不在视图控制器中创建委托的引用?

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    我不太清楚你的意思 - 有多种方法可以将信息从应用程序委托获取到视图控制器,并且“不创建委托的引用”这句话不清楚。您的选择基本上是:

    1. 引用应用程序委托,并酌情进行强制转换。您可以在视图控制器类中编写代码,例如:
      id propertyValue = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] myProperty];
    2. 在创建视图控制器时传入该属性。这要求视图控制器声明 @property 并使用 @synthesized,然后您可以让应用委托在视图控制器实例上设置属性。

    这些选项都不要求您将应用代理的副本保留为 @property,但第一个选项确实引用了一次代理。

    【讨论】:

    • 还有一个问题 [UIApplication sharedApplication].delegate;这是一种标准的方式吗,为什么我要问我在 3 个不同的类文件中需要一个名为“sharedObject”的属性,“sharedObject”驻留在 AppDelegate 类中?
    • 除非您想创建一个单例类来容纳该属性,否则使用[[UIApplication sharedApplication] delegate] 是在多个类中访问该属性的标准方法。 (说实话;无论如何,您基本上都是在访问单例。无需乘以单例。)
    【解决方案2】:

    [UIApplication sharedApplication].delegate

    您还需要在视图控制器中包含应用委托头文件,并可能将委托从 id 类型转换为您的实际应用委托类。

    #include "MyAppDelegate.h"
    
    ((MyAppDelegate *)[UIApplication sharedApplication].delegate).myProperty;
    

    【讨论】:

      【解决方案3】:
      [UIApplication sharedApplication].delegate;
      

      【讨论】:

      • 除了做 [UIApplication sharedApplication].delegate; 之外,我正在寻找实现相同目标的替代方法。 1. 像通过发布/订阅访问价值? 2.再一题【UIApplication sharedApplication】.delegate;这是一个标准,为什么我问我需要在 3 个不同的类文件中名为“sharedObject”的属性,“sharedObject”驻留在 AppDelegate 类中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多