如何在核心数据Swift中将NSManagedObject转换为Decodable类

我收到一些服务器响应,就像下面的格式。

{
    "sample_id": "Sample 1","token": 2,"data": [
        {
            "id": "2","date": "Oct 20 2019"
        },{
            "id": "3","date": "Oct 08,2019"
        }
    ]
}

为此,我创建了Entity并将属性声明为可转换类型。

 static func fetchInfo() -> [Info] {
        
        // Create Fetch Request
        let managedContext = someMethod.getcontext()
        let fetchRequest =  NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")

        var result = [Info]()
        do {
            // Execute Fetch Request
            let records = try managedContext.fetch(fetchRequest)
            if let records = records as? [Info] {
                result = records
            }
        }catch {
            print("Unable to fetch managed objects for entity \(String(describing: entity)).")
        }
        return result
    }

但是,在上述方法中,它不在记录中,并且数据未分配给模型(可解码)类。

我可解码的班级是

struct Info: Decodable {
    
    let sampleId: String?
    let token: Int?
    let data: [Data]?
    
    enum CodingKeys: String,CodingKey {
        case sampleId = "sample_id"
        case token = "surveys_taken"
        case data = "data"
        
    }
    
}

struct Data: Decodable {
    
    let id: String?
    let date: String?
    
    enum CodingKeys: String,CodingKey {
        case id = “id”
        case date = “date”
    }
}

有什么建议吗?

zhaochunlang1 回答:如何在核心数据Swift中将NSManagedObject转换为Decodable类

尝试这样测试

let fetchRequest: NSFetchRequest<Info> = Info.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "self == %@",self.objectID)
do {
    let result = try context.fetch(fetchRequest)
    if let info = result.first {
         return info
    }
} catch {
    print("Failed to fetch Info: \(error)",module: coreDataLogModule)
}

return self
本文链接:https://www.f2er.com/1425296.html

大家都在问