在 coredata 中更新加载布尔值
Posted
技术标签:
【中文标题】在 coredata 中更新加载布尔值【英文标题】:Updating a Bool on load in coredata 【发布时间】:2017-02-02 21:16:05 【问题描述】:我正在尝试检查该应用是否已安装,如果已安装,请删除所有待处理的本地通知。我正在尝试使用此代码,但它似乎没有正确保存到我的核心数据中。
// check to see if the app has already been installed
let global = Global(context:coreDataStack.managedContext)
print("Has the app been installed before = \(global.wasLoaded)") // returns false
if(global.wasLoaded == false)
print("remove local notifications")
// remove all notifications
center.removeAllPendingNotificationRequests()
global.wasLoaded = true
coreDataStack.saveContext()
print("Has the app been installed before = \(global.wasLoaded)") // returns true
下次我运行该应用程序时,wasLoad 布尔值仍然返回为 false。 我是否在此处运行了获取请求以使其正常工作?
【问题讨论】:
【参考方案1】:每次您创建一个新的Global
托管对象时,它始终具有默认值。要实现您想要的,您必须获取已设置的 Global
托管对象并检查它的属性。
Core Data 是解决这个问题的一个非常重要的解决方案,更好的方法是像这样使用UserDefualts
:
if UserDefaults.standard.bool(forKey: "isFirstLaunch") == false
// Perform first launch actions
UserDefaults.standard.set(true, forKey: "isFirstLaunch")
// Continue with regular setup
您与false
进行比较是因为如果从未为给定键设置值,bool(forKey:)
将返回false
。
【讨论】:
谢谢 jjatie,我知道核心数据已经结束了,应用程序的其余部分已经在使用核心数据,所以我想我只是在列表中添加一个实体并跟踪它方式。我以为我错过了请求,但就是不记得详细信息了。 在这种情况下,关于 SO 的许多问题已经与核心数据获取相关。我鼓励你检查一下。尽管如此,这还是比简单地使用UserDefaults
慢得多的解决方案。
对于您的解决方案,我会在执行第一次启动操作后设置 isFirstLaunch = true 吗?以上是关于在 coredata 中更新加载布尔值的主要内容,如果未能解决你的问题,请参考以下文章