Я пытаюсь настроить проверку в основных данных на простую структуру управляемого объекта.
Существует Building
и Floor
и взаимосвязь один-ко-многим между ними (в Building естьмного этажей).
Валидатор в Floor
выглядит так
// extension of auto generated managed object (Floor)
extension Floor {
override public func validateForInsert() throws {
try super.validateForInsert()
if (self.building == nil) {
throw ValidationError.missingBuilding("a floor requires a building")
}
}
}
И мой простой менеджер для тестирования:
import Foundation
import CoreData
class ObjectNodeManager {
let persistentContainer: NSPersistentContainer!
init(container: NSPersistentContainer) {
self.persistentContainer = container
self.persistentContainer.viewContext.automaticallyMergesChangesFromParent = true
}
lazy var backgroundContext: NSManagedObjectContext = {
return self.persistentContainer.newBackgroundContext()
}()
func insertObjectNode(objectNode: ObjectNode) -> ObjectNode? {
backgroundContext.insert(objectNode)
return objectNode
}
func save() {
if backgroundContext.hasChanges {
do {
try backgroundContext.save()
} catch {
fatalError("save error \(error)")
}
}
}
}
Когда я пытаюсь создатьЗа исключением нового здания и этажа, я получаю исключение.
let building = Building(context: manager.backgroundContext)
let floor = Floor(context: manager.backgroundContext)
floor.building = building // VALIDATION EXCEPTION!
// a basic backgroundContext.save() (persistentContainer) in the manager
manager.save()
С validationForInsert
невозможно вставить / сохранить управляемые объекты.В качестве альтернативы я мог бы использовать validationForUpdate
, но это было бы слишком поздно, поскольку я не хочу хранить Floor
без надлежащего отношения к Building
.
. Любое предложение о том, как сохранить управляющий объект с требуемымотношения и проверка на вставке?
Спасибо.