当应用程序关闭或终止时,将 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
文件中读到了applicationDidEnterBackground
和applicationWillTerminate
方法。
我知道如何从文件中创建、保存和读取数据。
我的问题是,我怎样才能从“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