CoreData关系错误会为谓词

时间:2016-11-03 00:08:24

标签: ios swift core-data

我在我的应用程序中使用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没有调用正确的访问者?

0 个答案:

没有答案