applicationWillTerminate,委托还是查看?

时间:2010-03-12 12:07:58

标签: iphone objective-c cocoa-touch

我希望在我的应用程序退出时保存一些设置,我对下面的两个不同版本有点困惑。我的感觉是,为了更好地适应MVC模式,我应该使用viewController中的版本。我只是很好奇,因为大多数人在使用该调用时似乎没有在appDelegate中做太多事情?

的AppDelegate

-(void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"_deli: applicationWillTerminate");
}

的ViewController

-(void)applicationWillTerminate:(NSNotification *)notification {
    NSLog(@"_view: applicationWillTerminate");
}
非常感谢

EDIT_001:

抱歉,我应该克服,你还需要在ViewController上添加(见下文)来完成上述工作。

UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationWillTerminate:)
                                                 name:UIApplicationWillTerminateNotification 
                                               object:app];

加里

2 个答案:

答案 0 :(得分:2)

使用任何一个人可以访问您要保存的数据。因此,如果ViewController可以看到数据,但AppDelegate不能,请使用它。

答案 1 :(得分:1)

好吧,为了鞭打我的个人爱好马,我会说设置是一种偏好形式,应保存在专用数据模型中。例如,NSUserDefaults是一个基于单例模式的数据模型。你当然可以自己动手。如果管理不相关的信息,在同一个应用程序中拥有多个数据模型是没有问题的。

关键是保存默认值/首选项/状态。然后,当应用程序退出时,默认值已经自动保存。请记住,在iPhone上,您永远不知道应用程序何时会被中断或退出。随时随地保存是唯一的选择。

此外,在您提供的代码示例中,视图控制器将如何知道应用程序何时退出? IIRC,UIViewController没有applicationWillTerminate:方法,并且不会自动接收特定的应用程序将退出消息。 (编辑: 在评论中,KennyTM指出视图控制器可以注册并监听UIApplicationWillTerminateNotification )您必须将此功能放在-viewWillUnload中。否则,您必须从app委托跟踪视图控制器,让代理在应用程序退出时向活动视图控制器发送消息。