【问题标题】:iOS 13, CoreData crash regarding transform propertyiOS 13,关于变换属性的 CoreData 崩溃
【发布时间】:2020-01-31 18:18:50
【问题描述】:

我正在尝试像以前一样从 Core Data 加载文件。 我的CoreData栈如下:

import Foundation
import CoreData

class SaveData:NSObject {



lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "DataModel")
    container.loadPersistentStores(completionHandler: {
    storeDescription, error in
    if let error = error {
        fatalError("Could load data store: \(error)")     }   })
    return container }()


lazy var managedObjectContext: NSManagedObjectContext = persistentContainer.viewContext

}

我的数据模型:

当保存功能被触发时,我没有保存数据的麻烦。但是在获取数据时遇到了麻烦。 我的 fetch 方法是这样的:

var saveData = SaveData()

var locations = [Location]()

override func viewDidLoad() {
    super.viewDidLoad()

    let fetchRequest = NSFetchRequest<Location>()   // 2
    let entity = Location.entity()
    fetchRequest.entity = entity   // 3
    let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]

    do {
        locations = try saveData.managedObjectContext.fetch(fetchRequest)
    } catch {
        fatalCoreDataError(error)
    }

}

从 CoreData 获取数据时,应用程序崩溃。调试区 说: 2019-10-02 20:44:29.780267+0800 MyLocation[20870:2214196] [错误] 错误:任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类 'Location' 所以 +entity 很困惑。你 加载你的 NSManagedObjectModel 了吗?核心数据:错误:否 任何模型中的 NSEntityDescriptions 声明 NSManagedObject 子类 '位置' 所以 +entity 很困惑。你有没有加载你的 NSManagedObjectModel 了吗? 2019-10-02 20:44:29.780387+0800 MyLocation[20870:2214196] [error] 错误:+[Location entity] 无法 为托管对象找到 NSEntityDescription 的唯一匹配项 子类CoreData:错误:+ [位置实体]未能找到唯一 将 NSEntityDescription 匹配到托管对象子类 2019-10-02 20:44:29.789644+0800 我的位置[20870:2214196] *** 由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'executeFetchRequest:错误:A 获取请求必须有一个实体。'

我已经尝试了我能找到的解决方案,目前没有任何效果。 如何解决这个问题?提前致谢。

【问题讨论】:

  • 在我看来,您的问题出在 SaveData() 中。该错误消息似乎表明 managedObjectContext 存在问题。

标签: ios core-data


【解决方案1】:

我之前已经解决了这个问题。

首先,我在托管对象上声明了一个名为 fetchRequest() 的方法,如下所示:

  extension OrderType {
        @nonobjc public class func fetchRequest() -> NSFetchRequest<OrderType> {
            return NSFetchRequest<OrderType>(entityName: "OrderType")
        }
        @NSManaged public var orderType: String?
        @NSManaged public var orderTypeId: Int32
        @NSManaged public var order: NSSet?
    }

应用程序在此行崩溃:

let itemCount = try managedObjectContext.count(for: OrderType.fetchRequest())

为了修复这个崩溃,我将代码更改为:

let fetchRequest = OrderType.fetchRequest()
let itemCount = try managedObjectContext.count(for: fetchRequest)

崩溃消失了!希望它也对你有用^^

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多