gpt4 book ai didi

ios - 核心数据 NSFetchRequest 为 "logically false"且短路无结果

转载 作者:行者123 更新时间:2023-11-30 11:53:00 25 4
gpt4 key购买 nike

我有一个 NSFetchedResultsController 查询,该查询以一种奇怪的方式失败,特别是因为它与另一个应用程序中的查询几乎相同。

简单模型,一个与子条目实体具有一对多关系的项目实体,我已经做过很多次的事情:

entity definition

if let proj = AppDelegate.appDelegate().persistentContainer.viewContext.object(with: projId) as? Project
{
currentProject = proj
let request = NSFetchRequest<Entry>(entityName:"Entry")
request.sortDescriptors = [NSSortDescriptor(key: "entryDate", ascending: true)]
request.predicate = NSPredicate(format: "%K = %@",#keyPath(Entry.project), proj)

frc = NSFetchedResultsController(fetchRequest: request,
managedObjectContext: AppDelegate.appDelegate().persistentContainer.viewContext,
sectionNameKeyPath: nil, cacheName:nil)
do {
try frc?.performFetch()
}
catch
{
print("error for entry frc perform")
}
}

如果我打印对象并且可以在 Base 中看到关联,即使它们清楚地存在,performFetch 也无法返回任何记录。如果我打开 SQLite 调试,我会收到以下消息”

CoreData: annotation: logically false fetch request (entity: Entry; predicate: (project == (entity: Project; id: 0x604000226b40 ; data: { entries = ""; projectDescription = nil; projectName = "Knickers Ice"; })); sortDescriptors: (( "(entryDate, ascending, compare:)" )); type: NSManagedObjectResultType; ) short circuits. CoreData: annotation: total fetch execution time: 0.0000s for 0 rows.

如果我删除谓词,则会返回记录,因此这显然是直接由谓词引起的。已尝试了创建它的所有变体:

request.predicate = NSPredicate(format: "%K = %@","project", proj)
request.predicate = NSPredicate(format: "project = %@", proj)

等等。如果我有什么事情搞砸了,我根本就看不到它。

最佳答案

您根本不需要获取您的项目。您可以通过

获取您的条目
request.predicate = NSPredicate(format: "project.objectID = %@", projId)

编辑:

您正在尝试按 NSManagedObject 过滤对象。我认为它导致了 CoreData 的消耗: NSManagedObject 仅存在于获取的上下文中,但谓词应用得更深,而该对象没有任何意义。因此,您需要提供 objectID (但您甚至在从上下文中检索对象之前就已经拥有它了)。

关于ios - 核心数据 NSFetchRequest 为 "logically false"且短路无结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144193/

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