重要
我了解到,我在下面所做的并不是解决问题的最明智的方法。我很想知道我的问题的解决方案,但是现在我能够通过使用核心数据一对多关系来实现我的目标,这行得通!
原始帖子
我有一个名为TestPeriods
的核心数据实体,并且我希望它具有一个名为periods
的属性,该属性是可转换的,并且由一个名为PeriodClass
的自定义类的数组组成
总而言之,当我尝试访问保存在实体中的期间时出了点问题,就像您最后看到的那样。
这是我的实体扩展名
extension TestPeriods {
@nonobjc public class func fetchRequest() -> NSFetchRequest<TestPeriods> {
return NSFetchRequest<TestPeriods>(entityName: "TestPeriods")
}
@NSManaged public var periods: [PeriodClass]?
}
这里是PeriodClass
,带有开始,结束和句点
public class PeriodClass: NSObject, NSCoding {
var start: Date?
var end: Date?
var period: Int16?
public func encode(with aCoder: NSCoder) {
aCoder.encode(start, forKey: "start")
aCoder.encode(end, forKey: "end")
aCoder.encode(period, forKey: "period")
}
public required init?(coder aDecoder: NSCoder) {
start = aDecoder.decodeObject(forKey: "start") as! Date
end = aDecoder.decodeObject(forKey: "end") as! Date
period = aDecoder.decodeObject(forKey: "period") as! Int16
}
init(start: Date, end: Date, period: Int16) {
super.init()
self.start = start
self.end = end
self.period = period
}
}
这是我保存到TestPeriods
实体的方式
let container = TestPeriods(context: PersistenceServce.context)
// The 'period' I refer to below is just an object with the same start, end, and period and I know is not nil
let x = PeriodClass(start: period.start!, end: period.end!, period: period.period)
container.periods?.append(x)
// Saving the object here
PersistenceServce.saveContext()
// I know this Persistence Service is not a problem as I use it for other Core Data Objects
问题是当我尝试检索PeriodClass
数组时
let tFetch: NSFetchRequest<TestPeriods> = TestPeriods.fetchRequest()
do {
let classes = try PersistenceServce.context.fetch(tFetch)
print("TEST CLASS COUNT \(classes.count)")
...
}
在这里,因为我之前保存了一个带有多个句点的实体,所以它会打印1
但是,当我打电话
print("TEST CLASS PERIODS \(classes[0].periods)")
我得到的都是零
由于某种原因,它正在保存实体,但没有正确保存应该伴随的期间。请让我知道我在做什么错以及如何解决此问题。谢谢!
答案 0 :(得分:0)
看起来container.periods
为零,因此该行:
container.periods?.append(x)
什么都不做。您需要将periods
初始化为一个空数组,然后才能向其中添加项目。或者对于第一个项目,只需创建一个包含该项目的数组:
container.periods = [x]