Базовые данные: настраиваемый массив классов преобразовываемого объекта - PullRequest
0 голосов
/ 24 января 2019

ВАЖНО

Я узнал, что то, что я делал ниже, не было самым умным решением моей проблемы.Мне любопытно увидеть решение моего вопроса, но на данный момент я смог достичь своей цели, используя вместо этого базовые данные один ко многим, что работает!

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)")

Все, что я получаю, это ноль

По какой-то причине, это сохраняет сущность, но не правильно сохраняет периоды, которые, как предполагается, должны идти вместе сЭто.Пожалуйста, дайте мне знать, что я делаю неправильно и как решить эту проблему.Спасибо!

1 Ответ

0 голосов
/ 24 января 2019

Похоже, container.periods - ноль, поэтому строка:

container.periods?.append(x)

ничего не делает.Вам нужно инициализировать periods пустым массивом, прежде чем вы сможете добавлять к нему элементы.Или для первого элемента просто создайте массив с этим элементом:

container.periods = [x]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...