【问题标题】:Mac Catalyst CoreData works iOS not macOSMac Catalyst CoreData 适用于 iOS 而不是 macOS
【发布时间】:2020-11-07 01:35:52
【问题描述】:

我尝试在 Mac Catalyst 上运行 iOS 应用,但我的应用具有 Core Data。我读过这篇文章:

Initializing CoreData in macOS

但我没有实现它。我不知道...

我在使用 Core Data 的 View Controller 中编写此代码。它与 AppDelegate.swift 文件中存在的代码相同(我没有删除它)。

#if targetEnvironment(macCatalyst)
// MARK: - Core Data stack

lazy var persistentContainer: NSPersistentContainer = {

     let container = NSPersistentContainer(name: "MyApp")

     container.loadPersistentStores(completionHandler: { (storeDescription, error) in
         if let error = error as NSError? {
         print("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 {
            let nserror = error as NSError
            print("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}
#endif

当我在 Core Data 中更新或插入数据时:

// SAVE the context.
do {
    try context.save()
} catch {
    let nserror = error as NSError
    print("Unresolved error \(nserror), \(nserror.userInfo)")
}

#if targetEnvironment(macCatalyst)
// SAVE the context.
self.saveContext()
#endif

我很迷茫。我需要知道如何编写代码。我知道这并不复杂,但我迷路了。

我展示了我用来读/写核心数据的代码。

let appDelegate = UIApplication.shared.delegate as! AppDelegate

let context = appDelegate.persistentContainer.viewContext

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Topic")

fetchRequest.returnsObjectsAsFaults = false

let results = try? context.fetch(fetchRequest)

let newSelectedValue = string

if (results?.count)! > 0 {
    for updateItem in results as! [NSManagedObject] {
        updateItem.setValue(newSelectedValue, forKey: "topicName")
    }
} else {
    let newItem = Topic(context: context)
    newItem.topicName = newSelectedValue
}

// SAVE the context.
do {
    try context.save()
} catch {
    let nserror = error as NSError
    print("Unresolved error \(nserror), \(nserror.userInfo)")
}

【问题讨论】:

    标签: core-data mac-catalyst


    【解决方案1】:

    据我了解,您阅读的帖子让您感到困惑,而不是帮助您。它的建议是将核心数据代码从 AppDelegate 移动到主 ViewController,我个人不同意。

    使用 Catalyst 时,您可以对 Core Data 使用完全相同的代码。

    所以我的建议是删除你专门为 macCatalyst 编写的代码,并在同一个地方为 iOS 和 macOS 加载 PersistentStores。

    【讨论】:

    • 我部分理解它的意思。我也不认为将核心数据方法从 AppDelegate.swift 移动到另一个视图控制器是非常正确的:在我看来这是一个“糟糕”的解决方案但我迷失在你的短语中:“加载 PersistentStores”我不很明白(这是我的错)
    • 我修改问题以附上我用来编写/读取核心数据的代码。
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2020-05-12
    • 2011-07-27
    • 2012-01-21
    相关资源
    最近更新 更多