当应用程序关闭或终止时,将 textField 中的数据保存到文件中

Posted

技术标签:

【中文标题】当应用程序关闭或终止时,将 textField 中的数据保存到文件中【英文标题】:Save data from textField into a file when the application has closed or terminated 【发布时间】:2015-04-01 17:48:23 【问题描述】:

在我的应用程序中有一个名为“Home”的视图控制器,带有一个textField。 我在AppDelegate 文件中读到了applicationDidEnterBackgroundapplicationWillTerminate 方法。 我知道如何从文件中创建、保存和读取数据。

我的问题是,我怎样才能从“Home”视图控制器(那里存储textField 数据)到AppDelegate applicationDidEnterBackground 方法中获取NSString,并用这些数据做我所有的事情?

【问题讨论】:

您的问题的答案取决于您真正想要做什么。您尝试在主视图控制器中访问的 NSString 是属性吗?您是否需要从您的应用程序委托中保存 NSString 数据,或者您是否可以在您的 Home 视图控制器中编写一个方法来保存该 NSString(例如,如果您从您的应用程序委托向所有观察者发送通知,说明该保存数据了)跨度> 这个通知怎么办?我认为这就是我需要的。 @MichaelDautermann 【参考方案1】:

您可以使用 NSNotificationCenter 在您的视图控制器中注册一个通知,该通知会在您输入 applicationDidEnterBackground 或 applicationWillTerminate 时触发。

因此,在这两种方法中,您都可以添加类似

[[NSNotificationCenter defaultCenter] postNotificationName:@"someDescriptiveName" object:self userInfo:@@"key" : @"value"];

userInfo 需要一个 NSDicitonary 并且您可以在其中传递任何类型的对象,在您的情况下,您不需要将任何东西从这里传递回您的视图控制器,您只需使用它作为让您的视图控制器知道应用程序的手段正在关闭。

在您的视图控制器中,您可以使用类似这样的方式注册该通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToCall:) name:@"someDescriptiveName" object:nil]; 

然后,每当您的 appDelegate 发布该通知时,您注册以侦听它的视图控制器将触发“methodToCall”,这可能是您有权做任何事情的方法,它接受一个 nsnotification,然后让您访问 nsdicitonary它的携带。

- (void)methodToCall:(NSNotification *)notif
NSLog(@"methodToCall fired with data %@",[[notif userInfo]valueForKey:@"key"]);

【讨论】:

【参考方案2】:

您可以借助控制器内部的 this 来做到这一点:

-(id)init

    if((self = [super init]))
    
        [[NSNotificationCenter defaultCenter]   addObserver:self
                                                   selector:@selector(appDidEnterBackground:)
                                                       name:UIApplicationDidEnterBackgroundNotification
                                                     object:[UIApplication sharedApplication]];
    
    return self;


-(void)appDidEnterBackground:(NSNotification *)note 
    NSLog(@"appDidEnterBackground");

您也可以使用 applicationWillTerminate 代替 UIApplicationDidEnterBackgroundNotification

【讨论】:

以上是关于当应用程序关闭或终止时,将 textField 中的数据保存到文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何在框架关闭时终止或杀死python GUI应用程序中的子线程

将用户位置发送到服务器(Web文件)甚至应用程序已关闭或终止或终止iOS Swift

如何将标签添加到 textField 类或动画占位符

当应用程序处于后台或终止状态时如何增加推送通知批处理计数

当应用程序关闭或应用程序在后台时获得两次 GCM PUSH 通知

当应用程序处于后台或终止状态时,如何找到用户位置?