在Core Data中使用NSPredicate和transformable属性

时间:2017-11-10 13:26:58

标签: swift core-data nspredicate transformable

我有一个类( TestClass ),它有两个属性 ID:String 代码:Int

class TestClass : NSObject , NSCoding {

@objc let ID : Int32
@objc let Code : String

init(id : Int32, code : String) {

    self.ID = id
    self.Code = code
}

public func encode(with aCoder: NSCoder) {

    aCoder.encode(ID, forKey: "ID")
    aCoder.encode(Code, forKey: "Code")
}

required public convenience init?(coder aDecoder: NSCoder) {

    guard let id = aDecoder.decodeObject(forKey: "ID") as? Int32, let code = aDecoder.decodeObject(forKey: "Code") as? String else {

        return nil
    }
    self.init(id: id, code: code)
}}

我将此类用于可转换类型。

@NSManaged public var trnsf: TestClass?

每件事情看起来都很棒,即使我可以排序我的抓取请求基于 ID

let SortDes = NSSortDescriptor(key: #keyPath(SomeEntity.trnsf.ID), ascending: true)//delete

问题:

我无法访问NSPredicate 名称字符串

let Prdct = NSPredicate(format: "%K == %@" ,#keyPath(SomeEntity.trnsf.Code) , "SomethingString")

请注意:

  1. 我知道CoreData将我的课程保存为A数据,但我只能使用"%K ==%@"
  2. 我知道CoreData中的关系但我不想在这种情况下使用它
  3. 它的工作如下,但我想比较属性而不是所有课程,因为我不知道id

    let Prdct = NSPredicate(format: "%K == %@" , #keyPath(SomeEntity.trnsf.ID) , TestClass(id: 1, code: text))
    

0 个答案:

没有答案