【发布时间】:2021-03-22 15:32:24
【问题描述】:
我的问题是,无论每个已保存的 Core Data 实体实例的任何关系如何,如何得出单个属性的总和?
这个 CoreData 问题与我看到的其他问题不同,因为其他人谈到从 CoreData GUI 中定义的关系派生属性。这里没有关系。我只想获取单个 CoreData 实体上每个已保存实例的总数*。
希望视频对您有所帮助。
大图
目标:为实体的每个实例映射所有单个 CoreData 属性。
我最近对此进行了大量研究,目前正在等待 Apple 技术团队的回复。先说我看过WWDC Vid on Core Data,很有帮助。
但他们谈到如何从多个关系中派生属性。这是我想映射的单一关系。
以及我检查过的有关该主题的所有其他资源,(a good deal can be found here)。感谢@lorem ipsum 提供的资源。
但这些资源再次谈到了如何聚合来自不同关系的属性。
所以为了清楚起见,对于每个保存的 Core Data 实体实例,如何为单个属性不考虑任何关系导出总 sum。 p>
如果有人能建议我如何获取所有已保存实例的数组或字典,我会很高兴。
添加更多细节
这是我正在使用的类(简化)
import Foundation
import CoreData
@objc(Ticket)
public class Ticket: NSManagedObject { }
extension Ticket {
@NSManaged var company: String
@NSManaged var hoursWorked: Int64
}
这是一个模拟 func 尝试传达我正在尝试做的事情的想法:
这是一个完全虚假的func,只是希望能澄清我正在尝试做的事情。
func getAllHoursForCompany(_ company: String, using context: NSManagedObjectContext) -> Int {
var allHours = [Int]()
let workingCompany: Ticket(context: context) where Ticket.company == company
for hours in workingCompany {
allHours.append(hours)
}
return allHours.reduce(0) { $0 + $1 }
}
【问题讨论】:
-
这能回答你的问题吗? Core Data sum of all instances attribute。当然,您还需要使用谓词来仅计算公司的总和
-
@JoakimDanielson 我添加了这个类和一个模拟函数,希望能澄清我的想法。是的,我接受的答案适用于计算另一个关系中的属性。但是看看这张图片:atenivel.sirv.com/… 这个答案适用于此,看看它是如何从一个完整的关系中计算一个属性的属性,这个 CoreData 模型没有任何关系..希望澄清..
-
@JoakimDanielson 看起来像它......哇,这从来没有出现在我的搜索中......让我试一试......
-
@JoakimDanielson 效果很好,除了这会给我每个条目的所有时间,我试图弄清楚如何获得“Verizon”或“T-Mobile”等的所有时间。
-
是的,我知道,这就是为什么我说你需要一个谓词