简体   繁体   English

在独立的 watchOS 应用上实现核心数据

[英]Implement Core Data on independent watchOS app

As I know, we can use Core Data on Apple Watch apps.据我所知,我们可以在 Apple Watch 应用上使用 Core Data。 So an independent watchOS app can have it's own persistent store.因此,独立的 watchOS 应用程序可以拥有自己的持久存储。 But when we creating a project for watchOS app, there is no option to use core data (like when we creating a project for an iOS app)但是当我们为 watchOS 应用程序创建项目时,没有使用核心数据的选项(就像我们为 iOS 应用程序创建项目时一样)

So, how to implement Core Data on an independent watchOS app?那么,如何在独立的 watchOS 应用上实现 Core Data 呢?

I've copied this code from an iOS app (which uses Core Data) and pasted it to the ExtensionDelegate of my independent SwiftUI watchOS app我已从 iOS 应用程序(使用核心数据)复制此代码并将其粘贴到我的独立 SwiftUI watchOS 应用程序的ExtensionDelegate

 // 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: "CoreDataToDo")
        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)")
            }
        }
    }

So what should I do next?那么接下来我该怎么做呢?
or am I already doing this wrong?还是我已经做错了?

Please help me.请帮我。 I've tried so hard to find how to do this.我已经努力寻找如何做到这一点。 But I can't find any good solutions because previously there were no independent watchOS apps so most of the developers didn't create a separate persistent stores for the watchOS apps.但是我找不到任何好的解决方案,因为以前没有独立的 watchOS 应用程序,所以大多数开发人员没有为 watchOS 应用程序创建单独的持久存储。
So please help me.所以请帮助我。
Thanks.谢谢。

You need to make sure you have an xcdatamodeld file as well, then you should be pretty much good to go.你需要确保你也有一个xcdatamodeld文件,那么你应该对 go 非常好。 See my answer to this question for how to pass your managed object context to View s and how to properly set up the WKHostingController subclass.有关如何将托管 object 上下文传递给View以及如何正确设置WKHostingController子类的信息,请参阅我对此问题的回答。

Check this video about CoreData FetchRequest for WatchOS in SwiftUI by schwiftyUI通过 schwiftyUI查看有关SwiftUI 中 WatchOS 的 CoreData FetchRequest的视频

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM