【问题标题】:Swift core data: keypath not found in entity error [closed]Swift核心数据:在实体错误中找不到键路径[关闭]
【发布时间】:2025-12-28 10:20:16
【问题描述】:

我在快速获取核心数据时出错。 我的代码是这样的

var mealResultController: NSFetchedResultsController<Food>!

private func setUpMealResultController() {
    let fetchRequest: NSFetchRequest<Food> = Food.fetchRequest()
    let userPredicate = NSPredicate(format: "user == %@", User.user!)
    let sortPredicate = NSPredicate(format: "sort == %@", "meal")
    let sortDescripter = NSSortDescriptor(key: "name", ascending: false)
    fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [userPredicate, sortPredicate])
    fetchRequest.sortDescriptors = [sortDescripter]
    
    mealResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: dataController.viewContext, sectionNameKeyPath: nil, cacheName: nil)
    
    mealResultController.delegate = self
    do {
        try mealResultController.performFetch()
    } catch {
        fatalError("Fetch cannot be performed: \(error.localizedDescription)")
    }
}

核心数据是这样的

coredata

当我在 try mealResultController.performFetch() 中执行 fetch 时,会出现这样的错误。

2021-08-18 15:03:51.412345+0900 MealPlanner209[9647:205175] [错误] 错误:SQLCore dispatchRequest:异常处理请求:,在 userInfo 为 (空值) CoreData:错误:SQLCore dispatchRequest:异常处理请求:,在 userInfo 为(null)的实体 Food 中找不到键路径名称 2021-08-18 15:03:51.424753+0900 MealPlanner209[9647:205175] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“在实体 Food 中找不到键路径名称”

【问题讨论】:

  • 您在Food 中没有属性name,这就是错误消息所说的内容,这就是您的实体图像清楚显示的内容。
  • 我是多么愚蠢......我只是专注于 NSPredicate.. 非常感谢

标签: ios swift core-data


【解决方案1】:

您的错误表明您的Food 对象没有name。根据您的图片,如果您的 Food 对象,则您没有此类属性

我建议你使用键路径而不是字符串变量,这将允许你在构建时得到错误而不是在运行时崩溃:

let key = NSExpression(forKeyPath: \Food.name).keyPath
let sortDescripter = NSSortDescriptor(key: key, ascending: false)

【讨论】:

    最近更新 更多