gpt4 book ai didi

swift - 快速地,在具有复合谓词的获取结果 Controller 中找不到实体的键路径

转载 作者:行者123 更新时间:2023-11-30 10:39:29 26 4
gpt4 key购买 nike

对于 NSFetchedResultsController,我试图创建一个满足 3 个可能的双重条件(1 AND“男性”)或(2 AND“男性”)或(3 AND“男性”)中任意 1 个的请求。 1,2,3 是存储的列整数,“Masculine”是从 CellData 实体到 Gender.text 的一对一关系的值(.text 已建立索引)。

enter image description here

CoreData 中的数据似乎是正确的。有一个列值,并且性别行的 PK 值被分配给 coreData.gender 关系属性(见下文)。

但是 - 我收到错误:在实体中找不到 keypath cellData.gender.text

我怀疑这是我创建谓词或复合谓词的方式,因为这对我来说是新的。

最初,cellData.gender.text 谓词是使用与数据库中现有值匹配的值来定义的:

var col0GenderPredicate: NSPredicate = NSPredicate(format: "cellData.gender.text == %@", "Masculine")
var col2GenderPredicate: NSPredicate = NSPredicate(format: "cellData.gender.text == %@", "Masculine")
var col3GenderPredicate: NSPredicate = NSPredicate(format: "cellData.gender.text == %@", "Masculine")

在获取结果 Controller 中,谓词是:1) 为 cellData.column 值定义。2) 复合成相应的列 AND cellData.gender.text 值对。3) 进一步复合为 OR 复合谓词。

@objc private func loadSavedData()
{
if fetchedResultsController == nil
{
print("creating fetchresultsController")
let request = CellData.createFetchRequest()
let sortDescriptor = NSSortDescriptor(key: "sortOrder", ascending: true) // sort by name
request.sortDescriptors = [sortDescriptor]
fetchedResultsController = NSFetchedResultsController(fetchRequest: request,
managedObjectContext: container.viewContext,
sectionNameKeyPath: nil,
cacheName: nil) as? NSFetchedResultsController<NSFetchRequestResult>

// 1)
let column0Predicate = NSPredicate(format: "column == %ld", 1)
let column2Predicate = NSPredicate(format: "column == %ld", 3)
let column3Predicate = NSPredicate(format: "column == %ld", 4)

// 2)
let col0AndGenderPredicate = NSCompoundPredicate(type: .and,
subpredicates: [column0Predicate, col0GenderPredicate])
let col2AndGenderPredicate = NSCompoundPredicate(type: .and,
subpredicates: [column2Predicate, col2GenderPredicate])
let col3AndGenderPredicate = NSCompoundPredicate(type: .and,
subpredicates: [column3Predicate, col3GenderPredicate])

// 3)
let columnAndGenderPredicate = NSCompoundPredicate(type: .or, subpredicates: [col0AndGenderPredicate, col2AndGenderPredicate, col3AndGenderPredicate])

fetchedResultsController?.fetchRequest.predicate = columnAndGenderPredicate
fetchedResultsController?.delegate = self
}

do { try fetchedResultsController?.performFetch() }
catch { print(error.localizedDescription) }
}

然后我收到一个错误:错误:SQLCoredispatchRequest:异常处理请求:在 userInfo 为(null)的实体中找不到 keypath cellData.gender.text

但是 cellData.gender 在 CoreData 中: enter image description here

性别.text 也在那里: enter image description here

其他讨论表明 FetchedResultsController 存在错误,但它一直有效,直到我开始链接谓词,并且我找不到任何突出显示问题的内容或任何可以尝试的内容。

最佳答案

您正在创建 NSFetchedResultsController 来从 CellData 请求数据,因此键路径应该仅是 gender.text

 var col0GenderPredicate: NSPredicate = NSPredicate(format: "gender.text == %@", "Masculine")

此外,与您所写的内容和图像相比,您在这里似乎有一个拼写错误

 let column0Predicate = NSPredicate(format: "column == %ld", 0)

不应该是1而不是0吗?还是问题中的文字有误?

关于swift - 快速地,在具有复合谓词的获取结果 Controller 中找不到实体的键路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57180624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com