0

我的根视图控制器中有一个数组,我需要在applicationDidEnterBackground调用时保存(使用核心数据)。如何向委托中的根视图控制器的实例发送消息?

我正在考虑在将委托设置为根时给它一个对视图控制器的引用,但这感觉效率低下。有一个更好的方法吗?

4

3 回答 3

3

在您的根视图控制器中注册以接收 ApplicationWillEnterBackground 通知。根视图控制器可以在收到此通知时执行保存。

您最初减少控制器之间耦合的本能是一个很好的本能。

于 2013-06-22T23:11:16.833 回答
0

1) 在您的 RootViewController .h 文件中,

+ (RootViewController *) sharedStore;

2) 在您的 RootViewController .m 文件中,

+ (RootViewController *) sharedStore
{
    static RootViewController *myStore = nil;

    if (!myStore) {
        myStore = [[RootViewController alloc] init];
    }
    return myStore;
}

3) 转到您的 AppDelegate.m 文件并导入您的 RootViewController

#import RootViewController.h

4) 在您的 AppDelegate.m 文件中,转到 ApplicationDidEnterBackground 方法并键入:

[[RootViewController sharedStore] saveChanges];

5)在RootViewController中实现saveChanges方法。

于 2013-06-22T23:08:53.677 回答
0

AJ112 的回答是:

  • 来自 a 的单例UIViewController,这不是一个好习惯。
  • 与您的 建立耦合UIApplication,这是尽可能避免的事情。

UIApplication您可以从处理多任务处理所需的任何课程中观察到一些通知。检查这个 SO 问题的答案:

iphone 4 sdk:检测从后台模式返回

UIApplication您可以在此处查看所有发布的通知:

http://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006728-CH3-DontLinkElementID_4

于 2013-06-23T11:35:10.157 回答