ios Magical Record保存在UIApplicationWillTerminateNotification上(示例代码)

栏目: ios · 发布时间: 2021-05-06

简介  这篇文章主要介绍了ios Magical Record保存在UIApplicationWillTerminateNotification上(示例代码)以及相关的经验技巧,文章约1908字,浏览量392,点赞数5,值得参考!

我有应用程序将系统事件存储到Core Data Database。要执行保存,我使用MagicalRecord。

所以,在init的记录器类中,我有:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleDidFinishLaunchingNotification) name:UIApplicationDidFinishLaunchingNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleWillTerminateNotification) name:UIApplicationWillTerminateNotification object:nil];

在句柄函数中,我存储了带有text和timestamp属性的简单实体:

- (void)handleDidFinishLaunchingNotification
{
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
        DBMessage *dbMessage = [DBMessage createEntityInContext:localContext];
        dbMessage.text = @"Did finish launching";
        dbMessage.timestamp = [NSDate date];
    }];
}

- (void)handleWillTerminateNotification
{
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
        DBMessage *dbMessage = [DBMessage createEntityInContext:localContext];
        dbMessage.text = @"Will terminate";
        dbMessage.timestamp = [NSDate date];
    }];
}

当我打开和关闭(没有崩溃)应用程序几次时,在我的数据库中我可以看到“完成启动”条目(更多那个,所以我确定应用程序已关闭,不仅移动到BG),但没有“将终止“。

如果错过发射事件,我会不会感到惊讶,因为我可以预期在发布通知后将调用init方法。

我可以做什么来存储终止事件?

答案

我有一个答案:

看起来当应用程序被终止时,不要让我保存在新的后台线程中。但保存当前线程工作正常。所以我所要做的就是通过调用saveWithBlockAndWait:而不是saveWithBlock:来更改保存方法以保存在当前线程中

- (void)handleWillTerminateNotification
{
    [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
        DBMessage *dbMessage = [DBMessage createEntityInContext:localContext];
        dbMessage.text = @"Will terminate";
        dbMessage.timestamp = [NSDate date];
    }];
}

现在事件已成功保存在DB上。


以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

iOS 跳转到系统的设置界面

Kotlin---------------magical data class(示例代码)

UVa 1642 Magical GCD (暴力+数论)(示例代码)

【BZOJ4052】[Cerc2013]Magical GCD 乱搞

878. Nth Magical Number(示例代码)

[BZOJ4052][Cerc2013]Magical GCD

Magical String(示例代码)

[Cerc2013]Magical GCD