如何修复loadPersistentStores避免加载时崩溃

时间:2019-04-01 15:05:11

标签: swift core-data itunesconnect

我正在尝试在Xcode上开发一个使用核心数据的应用程序,但是,当我将该应用程序提交进行测试审查时,它在他们的模拟器上崩溃了,但不是我的模拟器崩溃的。这是怎么回事?

对于初学者来说,我最近完成了一个应用程序的开发,该应用程序花了一段时间才开发出来,然后将其提交给iTunes connect。我的应用程序被拒绝,因为“由于启动时崩溃,我们无法对其进行审核”。我收到并标记了发生崩溃的那一行。

https://imgur.com/a/3iX6pqc

崩溃发生在我的应用程序委托中的第81行上,正是我要获取持久容器并将其加载到的位置。

https://imgur.com/EzQvnSQ

    lazy var persistentContainer: NSPersistentContainer = {
        /*
         The persistent container for the application. This implementation
         creates and returns a container, having loaded the store for the
         application to it. This property is optional since there are legitimate
         error conditions that could cause the creation of the store to fail.
         */
        let container = NSPersistentContainer(name: "AlarmSavedData")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in

            if let error = error as NSError? {
                print("Here!")
                // Replace this implementation with code to handle the error appropriately.
                // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.



                /*
                 Typical reasons for an error here include:
                 * The parent directory does not exist, cannot be created, or disallows writing.
                 * The persistent store is not accessible, due to permissions or data protection when the device is locked.
                 * The device is out of space.
                 * The store could not be migrated to the current model version.
                 Check the error message to determine what the actual problem was.
                 */
                fatalError("Unresolved error \(error), \(error.userInfo)")

            }
        })
        return container
    }()

我希望本地数据库可以很好地加载它们,但是由于某种原因,我是唯一要为其加载数据库的数据库。我可以使用它,但是当Apple Review团队尝试运行它时,它崩溃了。关于正在发生的事情以及如何解决它的任何想法?目标是让每个用户使用核心数据拥有自己的本地数据库来存储他们创建的数据。

崩溃日志:https://imgur.com/a/rx9doSR

2 个答案:

答案 0 :(得分:0)

首先,请确保您正在使用崩溃报告中指示的iOS 12.1.4模拟器测试应用。崩溃报告指出硬件 1xxx ,这显然是某种占位符,无济于事。

我还无法解释崩溃的原因,但是这里有一些线索可能会帮助您找到它。

Apple's TN2151中,关于您所遇到的EXC_BREAKPOINT类型的崩溃,它指出:

如果在运行时遇到意外情况,则

Swift代码将以该异常类型终止,例如:

  • 值为nil的非可选类型

  • 强制类型转换失败

将其与崩溃发生在loadPersistentStores()中的事实一起表示,这可能不会对您造成崩溃,因为您已经在模拟器的模拟磁盘上拥有一个永久性存储,也就是说,您不是第一个-时间用户。 App Review当然是第一次使用。因此,您应该从模拟器中删除应用程序的数据,特别是持久性存储文件,然后再次进行测试。现在,您的测试将更像是App Review的测试。

您可能还应该read this answer讨论一种类似的情况。

答案 1 :(得分:0)

尝试重置模拟器。为我解决了这个问题:

enter image description here