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

Save data from textField into a file when the application has closed or terminated

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

我的问题是,如何从“Home”viewController(存储 textField 数据)到 AppDelegate applicationDidEnterBackground 方法并用这些数据做我所有的事情?

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

因此,在这些方法中的任何一种中,您都可以输入类似

的内容
[[NSNotificationCenter defaultCenter] postNotificationName:@"someDescriptiveName" object:self userInfo:@{@"key" : @"value"}];

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

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

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

然后,每当你的 appDelegate post 那个通知,你注册监听它的视图控制器就会触发 "methodToCall" 这可能是你有权做任何事情的方法,它接受一个nsnotification 然后让你访问它携带的 nsdicitonary。

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

您可以借助控制器内的这个来完成此操作:

-(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 代替 UIApplication DidEnterBackgroundNotification