Использование NSPredicate с трансформируемым атрибутом в базовых данных

У меня есть класс A (TestClass), и у него есть два свойства ID: строка и код: 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?

Все выглядит так хорошо, даже я могу отсортировать запрос на выборку по идентификатору

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. это работает, как показано ниже, но я хочу сравнить свойства, а не все классы, потому что я не знаю идентификатор

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

0 ответов

Другие вопросы по тегам