【问题标题】:How to create a reference to on of my view controllers from my app delegate?如何从我的应用委托创建对我的视图控制器的引用?
【发布时间】:2011-01-20 00:56:42
【问题描述】:

您好,我想知道,如何从我的应用委托创建对我的视图控制器之一的引用?当我的应用进入前台时,我想从委托中调用(我的视图控制器的)特定方法。

【问题讨论】:

  • 哪个视图控制器? [window makeKeyAndVisible]之前使用的那个?

标签: iphone objective-c cocoa-touch iphone-sdk-3.0 ios4


【解决方案1】:
  1. 在您的 *AppDelegate 中创建同一个类的成员 ivar 指针,启动时将其设置为 nil,将其属性设置为“assign”。
  2. 当特定的视图控制器被创建并加载到内存中时,在这个控制器的viewDidLoad方法中:

    [[[UIApplication sharedApplication] delegate] setThatSpecialContrller:self];

  3. 当这个控制器必须在某个时候被释放时,您可以使用类似的代码行再次将指针设置为 nil。

  4. 每次您的应用从后台转到前台时进行检查,如果指针不为零,请使用此非零引用来调用您的特定控制器及其方法。

【讨论】:

  • 这是标准行为,即 Apple 建议您这样做吗?是的,我知道这会奏效,但这是最优雅的方式吗?
  • @Altealice:如果你想要优雅(可能还有可重用性),你仍然可以使用我的建议,但是在实施时,你应该严格遵循 Apple 强烈推荐的委托/协议模式。
【解决方案2】:

或者,您可以收听UIApplicationWillEnterForegroundNotification 通知。

- (void)viewDidLoad {
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self selector:@selector(applicationWillEnterForeground:) UIApplicationWillEnterForegroundNotification object:nil];
}

- (void)viewDidUnload {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

【讨论】:

  • applicationWillEnterForeground: 方法是否与应用委托中的方法相同,我是否需要在视图控制器中创建此方法?
  • 您可以将选择器更改为您想要的任何对象中的任何内容。
【解决方案3】:

diwup 提到的替代方法在this 教程的“将左与右连接起来”一节中得到了很好的简短描述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2020-09-20
    相关资源
    最近更新 更多