Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 此NSPersistentStoreCoordinator没有永久存储(设备锁定)。它无法执行保存操作。专用静态法_Swift_Iphone_Core Data - Fatal编程技术网

Swift 此NSPersistentStoreCoordinator没有永久存储(设备锁定)。它无法执行保存操作。专用静态法

Swift 此NSPersistentStoreCoordinator没有永久存储(设备锁定)。它无法执行保存操作。专用静态法,swift,iphone,core-data,Swift,Iphone,Core Data,当试图保存或更新记录时,应用程序在生产中随机崩溃 这是一个VOIP应用程序,获得后台CallKit推送,在某些条件下,将其写入CoreDate DB。我怀疑这就是导致应用程序崩溃的原因,但我在网上找不到它的任何参考资料 尝试在本地复制此问题但没有成功,可能是因为在首次解锁手机之前无法使用Xcode进行调试 这是AppDelegate中的CoreDate代码: lazy var persistentContainer:NSPersistentContainer={ let container=NS

当试图保存或更新记录时,应用程序在生产中随机崩溃

这是一个VOIP应用程序,获得后台CallKit推送,在某些条件下,将其写入CoreDate DB。我怀疑这就是导致应用程序崩溃的原因,但我在网上找不到它的任何参考资料

尝试在本地复制此问题但没有成功,可能是因为在首次解锁手机之前无法使用Xcode进行调试

这是AppDelegate中的CoreDate代码:

lazy var persistentContainer:NSPersistentContainer={
let container=NSPersistentContainer(名称:“Model”)
var persistentstorescriptions:nspersistentstorescription
让storeUrl=FileManager.default.containerURL(用于安全应用程序组标识符:“group.com.appname”)!.appendingPathComponent(“Model.sqlite”)
let description=NSPersistentStoreDescription()
description.shouldInferMappingModelAutomatically=true
description.shouldMigrateStoreAutomatically=true
description.url=storeUrl
container.persistentStoreDescriptions=[NSPersistentStoreDescription(url:FileManager.default.containerURL(用于安全应用程序组标识符:“group.com.appname”)!.appendingPathComponent(“Model.sqlite”)]
中的container.loadPersistentStores(completionHandler:{(storeDescription,错误)
如果let error=错误为N错误{
//将此实现替换为适当处理错误的代码。
//fatalError()导致应用程序生成崩溃日志并终止。您不应在装运应用程序中使用此函数,尽管它在开发过程中可能很有用。
/*
此处出现错误的典型原因包括:
*父目录不存在、无法创建或不允许写入。
*由于设备锁定时的权限或数据保护,无法访问持久存储。
*设备空间不足。
*无法将存储迁移到当前模型版本。
检查错误消息以确定实际问题是什么。
*/
Crashlytics.sharedInstance().recordError(错误)
#如果调试
fatalError(“未解决的错误\(error),\(error.userInfo)”)
#恩迪夫
}
})
返回容器
}()
//MARK:-核心数据保存支持
func saveContext(){
let context=persistentContainer.viewContext
managedContext.mergePolicy=nsMergeByPropertyObject特朗普合并策略
如果context.has发生更改{
做{
尝试context.save()
}抓住{
//将此实现替换为适当处理错误的代码。
//fatalError()导致应用程序生成崩溃日志并终止。您不应在装运应用程序中使用此函数,尽管它在开发过程中可能很有用。
Crashlytics.sharedInstance().recordError(错误)
}
}
}
发生崩溃的函数:

Call.swift:

let callEntity=NSEntityDescription.entity(在:managedContext中,名为“Call”)!
静态函数upsertCall(调用:调用?){
如果(调用==nil){
返回
}
//在这里验证。。
//..
做{
managedContext.mergePolicy=nsMergeByPropertyObject特朗普合并策略
请尝试managedContext.save()
}抓住{
设nserror=错误为nserror
NSLog(“未解决的错误\(nserror),\(nserror.userInfo)”)
Crashlytics.sharedInstance().recordError(错误)
}
}
运行 -斯威夫特5
-Xcode 10.2

我在崩溃中看到了类似的错误: CoreData:[NSPersistentStoreCoordinator\u coordinator\u您从未成功打开\u数据库\u设备\u loc…+52

我的理解是,应用程序正在做一些事情,但不允许访问核心数据。在我的情况下,是在从通知中将数据保存到核心数据时

我将此检查添加到保存到核心数据的方法中:

if !UIApplication.shared.isProtectedDataAvailable {
            return
        }
这是一个VOIP应用程序,在某些情况下获得后台CallKit推送,并将其写入CoreDate DB。我怀疑这就是导致应用程序崩溃的原因,但我在网上找不到它的任何参考

尝试在本地复制此问题但没有成功,可能是因为在首次解锁手机之前无法使用Xcode进行调试

前一段时间,我遇到了类似的问题,原因是应用程序在没有DB文件访问权限的情况下运行

我已使用以下设置调试此问题:

  • 启用(实现)对文件的日志记录(例如,使用CocoaLumberjack,但任何日志记录都可以)。确保将文件访问设置为
    NSFileProtectionNone
    ,以便可以随时将其写入
  • 记录关于有问题的代码和所有与应用程序生命周期相关的应用程序委托回调的所有内容
  • 在设备上安装应用程序。它必须启用密码和锁。
  • 现在使用上述设置,有多个场景用于触发此问题:

  • 重新启动手机,不要输入密码,让它躺下来,旧的iOS用来在几小时/几天后生成应用程序,只是为了执行后台提取(如果设置)
  • 重新启动手机,不要输入密码,触发远程推送通知或voip呼叫
  • 在分析日志后的两种情况下,很明显应用程序在后台被唤醒,但文件保护尚未解除(因为没有输入密码)

    现在,老实说,我不知道上述问题是否还会重现,但你的问题似乎会重现