【问题标题】:Removing Realm Data in the applicationWillTerminate删除 applicationWillTerminate 中的领域数据
【发布时间】:2017-11-09 19:47:37
【问题描述】:

我有以下情况,当应用程序从设备内存中抛出时,我从 Realm 中删除了非实际数据。我有一个特殊的 FriendRealmManager 类,该类包含函数 clearCache,它删除用户(目前还不是朋友)。当我在 applicationWillTerminate 函数中调用这个管理器时,当我返回应用程序后,我看到这个函数不起作用,因为有模型的用户不再是朋友。我试图将 clearCache 函数的代码移到 applicationWillTerminate 中,这很有效。请告诉我,是否可以在 applicationWillTerminate 中对不同管理器的功能执行类似操作?

普通函数和静态函数我都试过了。

没用

func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
        FriendRealmManager.clearCache()
    }

class FriendRealmManager {

    static func clearCache() {
        DispatchQueue.main.async {
            do {
                let realm = try Realm()
                try realm.write {
              let nonFriendUsers = realm.objects(RealmUser.self).filter("isFriend == %@ AND isMain == %@", false, false)
                realm.delete(nonFriendUsers)
                }
            } catch {
                debugPrint(error.localizedDescription)
            }
        }
    }
}

有效

func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    do {
        let realm = try! Realm()
        try realm.write {
       let nonFriendUsers = realm.objects(RealmUser.self).filter("isFriend == %@ AND isMain == %@", false, false)
                realm.delete(nonFriendUsers)
        }
    } catch {
        debugPrint(error.localizedDescription)
    }
}

【问题讨论】:

  • 尝试看看applicationWillTerminate中使用的是什么线程:

标签: ios swift realm appdelegate terminate


【解决方案1】:

您的函数无法运行的最可能原因是您将其作为异步函数调用,并且系统在您的函数执行之前终止了您的应用程序。查看applicationWillTerminate的官方文档,它指出

您对该方法的实现大约有五秒钟的时间来执行任何任务并返回。如果该方法在时间到期之前没有返回,系统可能会完全杀死该进程。

因此,我建议从您的函数中删除 DispatchQueue.main.async 部分,然后同步运行您的删除操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多