将CoreData集成到我的ToDo应用中时得到黑屏 [英] getting Black Screen while integrating CoreData to my ToDo app Swift
问题描述
我正在从在线课程中学习Swift,在我的讲师将CoreData集成到她现有的代码的同时,她创建了一个新的核心数据模型并复制粘贴了App Delegate。但是在她的DataModel中,我的里面没有SceneDelegate。
I am learning Swift from Online Course and while my instructor integrating CoreData to her existing code, She creates a new core data model and copy-paste App Delegate. But in her DataModel, there is not a SceneDelegate while there is in mine.
问题是由于这些差异,我无法做与她相同的事情。因此,我将SceneDelegate.swift文件复制到我的Xcode项目中,并从DataModel App Delegate复制了其他内容。
The problem is that I can not do the same things as her because of these differences. Therefore, I copied SceneDelegate.swift file into my Xcode project and copy other things from DataModel App Delegate.
此解决方案之后,我得到了黑屏。
After this solution, I got a black screen.
我不知道我是否应该添加她和我的应用程序委托,但是区别是我没有在核心数据模型应用程序委托中拥有applicationWillResignActive,applicationDidEnterBackgraound等功能,但她确实有
I do not know I should add her and my app delegate or not but differences are while I do not have applicationWillResignActive, applicationDidEnterBackgraound, etc. in the Core Data Model App Delegate, she does have.
在存在这些差异的情况下如何将CoreData集成到我的项目中?
How can I integrate CoreData into my project while there are these differences?
谢谢!
这是我的应用程序委托文件
this is my app delegate file
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
func applicationWillResignActive(_ application: UIApplication) {
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
}
func applicationDidBecomeActive(_ application: UIApplication) {
}
func applicationWillTerminate(_ application: UIApplication) {
}
}
推荐答案
您需要以下几行代码:
// MARK: - Core Data stack
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: "TestCoreData")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
// 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
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
// 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.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
将其放在 applicationWillTerminate
函数之后但在AppDelegate类。
Put it after the applicationWillTerminate
function but within the AppDelegate class.
在创建Xcode项目并选中使用核心数据复选框时,会自动添加代码。您始终可以创建一个新的Xcode项目,选中使用核心数据复选框,然后将代码复制并粘贴到自动创建的AppDelegate末尾附近。
The code is automatically added when creating an Xcode project and checking the 'Use Core Data' checkbox. You can always create a new Xcode project, check the 'Use Core Data' checkbox and then copy and paste the code near the end of the AppDelegate which was automatically created.
这篇关于将CoreData集成到我的ToDo应用中时得到黑屏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!