将CoreData集成到我的ToDo应用中时得到黑屏 [英] getting Black Screen while integrating CoreData to my ToDo app Swift

查看:72
本文介绍了将CoreData集成到我的ToDo应用中时得到黑屏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从在线课程中学习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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆