我在我的应用程序中使用CoreData和MagicalRecord进行商店管理。我制作了xcdatamodel并生成了NSManagedObjects子类。我的问题是,当我尝试使用其中一个生成的访问器进行关系时,我得到了一个“未实现的SQL生成谓词”错误。这只发生在一个生成的访问器上。
更具体地说,这是我正在使用的类的代码。我遇到的问题是作物 - >行关系,这是多对多的:
extension Crop {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Crop> {
return NSFetchRequest<Crop>(entityName: "Crop");
}
@NSManaged public var phLevels: Int16
@NSManaged public var row: NSSet?
@NSManaged public var states: NSSet?
// MARK:行的生成访问器:
extension Crop {
@objc(addRowObject:)
@NSManaged public func addToRow(_ value: Row)
@objc(removeRowObject:)
@NSManaged public func removeFromRow(_ value: Row)
@objc(addRow:)
@NSManaged public func addToRow(_ values: NSSet)
@objc(removeRow:)
@NSManaged public func removeFromRow(_ values: NSSet)
这是行:
extension Row {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Row> {
return NSFetchRequest<Row>(entityName: "Row");
}
@NSManaged public var name: String?
@NSManaged public var crops: NSSet?
@NSManaged public var paddock: Paddock?
}
// MARK:为作物生成的访问者 扩展行{
@objc(addCropsObject:)
@NSManaged public func addToCrops(_ value: Crop)
@objc(removeCropsObject:)
@NSManaged public func removeFromCrops(_ value: Crop)
@objc(addCrops:)
@NSManaged public func addToCrops(_ values: NSSet)
@objc(removeCrops:)
@NSManaged public func removeFromCrops(_ values: NSSet)
我正在尝试向裁剪添加一行:
plantingCrop?.addToRow(row)
当我得到
时谓词
的未实现SQL生成
或者,如果我尝试相反的结果:
row.addToCrops(plantingCrop!)
我有点迷失在这里,plantingCrop生成好了,我在庄稼中设置行之前使用其他访问器并且它们工作正常(它们是一对多的关系),我试图重新生成子类和相同的结果。在调试器中,我可以看到当我尝试使用它时,关系是错误的。可能有些不对劲我错过但我找不到它!
更新
尝试使用下面的代码和相同的结果。
if let rowsFromCrop = plantingCrop?.mutableSetValue(forKey: "row") {
rowsFromCrop.add(row)
}
修改
在Apple Docs中,瞬态属性上的勾选表示该属性是您定义为模型一部分的属性,但不会作为实体实例数据的一部分保存到持久性存储中。核心数据会跟踪您对瞬态属性所做的更改,因此会记录它们以进行撤消操作。然后说:
“如果撤消对使用非模型信息的瞬态属性的更改,则Core Data不会使用旧值调用您的set访问者 - 它只会更新快照信息。”
我不完全理解这最后一行,但可能是因为它是一个瞬态属性CD没有调用正确的访问者?