首先是 "applicationWillResignActive" 应用程序代理方法还是与该事件相关的通知?

7 浏览
0 Comments

首先是 "applicationWillResignActive" 应用程序代理方法还是与该事件相关的通知?

在我的应用程序委托中,当调用applicationWillResignActive:方法时,我会保存(持久化)一个对象。我有一个视图控制器响应UIApplicationWillResignActiveNotification并对先前提到的对象进行修改,但不保存(持久化)对象本身。

我想知道的是,这个更改是否会通过applicationWillResignActive:方法进行持久化,还是我应该在视图控制器中显式保存以确保?

编辑:NSLog测试结果是:第一个是委托方法,第二个是通知方法。

我不确定测试是否能保证每次顺序都一样,因为我不知道通知中心的工作原理。这就是为什么我在测试和给出结果之前发布了这个问题。

0
0 Comments

UIApplicationWillResignActiveNotification 通知在 applicationWillResignActive 方法之后发送,这可能导致在 applicationWillResignActive 方法内部无法获取到通知中的已改变的值。为了验证操作的顺序,可以在代码中插入一些 NSLog 行。

解决方法:

为了获取通知中的已改变的值,可以通过在通知触发时执行相应的操作来解决这个问题。可以在接收到 UIApplicationWillResignActiveNotification 通知后,立即执行与 applicationWillResignActive 方法中相同的操作,以确保获取到正确的值。

下面是一个示例代码,演示了如何解决这个问题:

- (void)applicationWillResignActive:(UIApplication *)application {
    // 在 applicationWillResignActive 方法中执行的操作
    // ...
}
- (void)handleResignActiveNotification:(NSNotification *)notification {
    // 在接收到 UIApplicationWillResignActiveNotification 通知时执行的操作
    // ...
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 注册 UIApplicationWillResignActiveNotification 通知
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(handleResignActiveNotification:)
                                                 name:UIApplicationWillResignActiveNotification
                                               object:nil];
    return YES;
}
- (void)dealloc {
    // 移除 UIApplicationWillResignActiveNotification 通知的观察者
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIApplicationWillResignActiveNotification
                                                  object:nil];
}

通过以上的代码,可以确保在 applicationWillResignActive 方法内部和接收到 UIApplicationWillResignActiveNotification 通知时都能获取到正确的值。

0