2010-03-12 44 views
0

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

的AppDelegate

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

的ViewController

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

千恩万谢

EDIT_001:

对不起,我应该claifiy,你还需要(见下文)添加到ViewController来完成上述工作。

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

加里

回答

1

那么,为了让我的个人爱好马,我会说设置是一种偏好的形式,应该保存在一个专用的数据模型。例如,NSUserDefaults是建立在单例模式上的数据模型。你当然可以推出自己的产品。如果他们管理不相关的信息,那么在同一个应用中拥有多个数据模型没有问题。

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

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

+0

@TechZen:视图控制器可以侦听'UIApplicationWillTerminateNotification'通知。 – kennytm

+0

我当然会考虑保存“as and when”,我并不特别需要保存退出。 – fuzzygoat

+0

@KennyTM - 好点,我编辑了我的答案以反映这一点。但是,我不确定这代表了好的设计。我认为这会使控制器承担模型的责任。当然,当你确实需要它的时候,在(我认为)罕见的情况下,在你的颤抖中找到箭头总是很好的。谢谢。 – TechZen

2

使用哪一个访问要保存的数据。因此,如果ViewController可以看到数据但AppDelegate不能,那就使用它。