swift - 快速,在具有复合谓词的提取结果控制器中找不到实体的键路径
问题描述
对于 NSFetchedResultsController,我正在尝试创建一个满足 3 个可能的双重条件(1 和“男性”)或(2 和“男性”)或(3 和“男性”)中的任何一个的请求。1,2,3 是存储的列整数,“阳性”是从 CellData 实体到 Gender.text 的一对一关系的值(.text 被索引)。
CoreData 中的数据似乎是正确的。有一个列值,性别行的 PK 值分配给 coreData.gender 关系属性(见下文)。
但是 - 我收到一个错误:keypath cellData.gender.text not found in entity
我怀疑这是我创建谓词或复合谓词的方式,因为这对我来说是新的。
最初,cellData.gender.text 谓词使用与 DB 中现有值匹配的值定义:
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")
在获取的结果控制器中,谓词是: 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) }
}
然后我得到一个错误:错误:SQLCore dispatchRequest:异常处理请求:,keypath cellData.gender.text not found in entity with userInfo of (null)
但是 cellData.gender 在 CoreData 中:
其他讨论表明 FetchedResultsController 存在错误,但在我开始链接谓词之前它一直有效,我找不到任何突出问题的东西或任何可以尝试的东西。
解决方案
你正在创建你的 NSFetchedResultsController 来请求数据,CellData
那么 keypath 应该gender.text
只是
var col0GenderPredicate: NSPredicate = NSPredicate(format: "gender.text == %@", "Masculine")
此外,与您所写的内容和图像相比,您在这里似乎有错字
let column0Predicate = NSPredicate(format: "column == %ld", 0)
它不应该是 1 而不是 0 还是问题中的文字错误?
推荐阅读
- python - 在 Python 中实现“打印”
- react-native - React Native - Expo - WebPack 热模块替换插件问题
- python - Python 闭包,为每个嵌套函数创建具有不同 ID 的新 int
- angular - 在angular2中访问嵌套数组对象时出现问题
- apache-camel - Camel Exchange getContext() 的文档 寻找可在 exchange.getContext() 上调用的文档
- python - 用 Python 解析 JSON 并返回所有匹配的字段
- regex - 之前的开发人员,没有更改 CSS 文件,而是在顶部写了另一个。现在我必须将这些更改迁移到实际文件 - 有什么建议吗?
- kotlin - Dispatcher IO 和 Default 用法的区别
- c++ - 在 C++ 中创建一个函数返回给定单词的频率
- regex - Perl 与正则表达式匹配一个数字和与数字在字符串中指定的一样多的后续字符