ВАЖНО
Я узнал, что то, что я делал ниже, не было самым умным решением моей проблемы.Мне любопытно увидеть решение моего вопроса, но на данный момент я смог достичь своей цели, используя вместо этого базовые данные один ко многим, что работает!
ORIGINAL POST
У меня есть объект Core Data с именем 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)")
Все, что я получаю, это ноль
По какой-то причине, это сохраняет сущность, но не правильно сохраняет периоды, которые, как предполагается, должны идти вместе сЭто.Пожалуйста, дайте мне знать, что я делаю неправильно и как решить эту проблему.Спасибо!