gpt4 book ai didi

swift - 基于对多引用对项目进行排序

转载 作者:行者123 更新时间:2023-11-30 12:18:59 24 4
gpt4 key购买 nike

我想根据引用项目的属性获取项目。

就像我有一些盒子,所有盒子里都有元素,我想看到按标题(a、b、c、d、e)排序的盒子,但首先是装有成品的盒子。

  • “a”框(5 项)
  • “c”框(2 项)
  • “e”框(8 项)
  • 方框“b”(0 件)
  • “d”框(0 件)

我尝试使用子查询但没有得到正确的结果。

由于使用过程中的更新,我想使用 NSFetchResultController。

let sortDescriptors = [
NSSortDescriptor(key: "( SUBQUERY(items,$item,$item.finished == 0).@count > 0 )", ascending: false),
NSSortDescriptor(key: "title", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare))
]

有人知道如何解决这个问题吗?

我也尝试使用sectionNameKeyPath,但是

let sectionKeyPath = "(( items.finished == 0).@count > 0 )"

我收到“来自调试器的消息:由于内存问题而终止”

代码:

extension ManagedBox {

@nonobjc open override class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> {
return NSFetchRequest<ManagedBox>(entityName: "ManagedBox") as! NSFetchRequest<NSFetchRequestResult>;
}

@NSManaged public var paused: Bool
@NSManaged public var title: String?

@NSManaged public var items: NSSet?
}

extension ManagedItem {

@nonobjc open override class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> {
return NSFetchRequest<ManagedItem>(entityName: "ManagedItem") as! NSFetchRequest<NSFetchRequestResult>;
}

@NSManaged public var finished: Bool
@NSManaged public var title: String?

@NSManaged var box: ManagedBox?
}

最佳答案

使用 CoreData 和 SQLite 后备存储,您只能按持久属性进行排序。因此,一种解决方案是向您的 ManagedBox 实体添加一个新的持久 hasFinishedItems 属性,并确保在更新相关的 ManagedItems 时更新该属性。

但我认为更好的解决方案是使用两个获取的结果 Controller :一个用于处理带有成品的ManagedBox对象,另一个用于处理这些没有成品。两个 FRC 都将使用 title 属性进行排序,但其中一个将具有如下谓词:

SUBQUERY(items,$item,$item.finished == 0).@count > 0

另一个将有补充谓词:

SUBQUERY(items,$item,$item.finished == 0).@count == 0

您的 tableView 数据源/委托(delegate)方法将需要有两个部分,第一个部分使用第一个 FRC 填充,第二个部分使用第二个 FRC 填充。同样,FRC 委托(delegate)方法需要确保由第一个 FRC 更新 tableView 的第 0 部分触发的更改,而由第二个 FRC 更新第 1 部分触发的更改。前提是您小心地将索引路径从 FRC 重新映射到正确的索引路径对于电视(反之亦然),这应该可以正常工作。

关于swift - 基于对多引用对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45039602/

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