Использование 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")
Пожалуйста, обратите внимание, что:
- Я знаю, что CoreData сохраняет мой класс как данные A, и только я могу использовать "%K == %@"
- Я знаю об отношениях в CoreData, но я не хочу использовать это в этом случае
это работает, как показано ниже, но я хочу сравнить свойства, а не все классы, потому что я не знаю идентификатор
let Prdct = NSPredicate(format: "%K == %@" , #keyPath(SomeEntity.trnsf.ID) , TestClass(id: 1, code: text))