core-data - 使实体关系可编码/可解码时出错

标签 core-data swift4 codable decodable encodable

如何在 swift4 可编码中编码/解码 NSOrderedSet 变量,同时使用 coredata NSManagedObject 进行映射?

import CoreData
import Foundation

@objc(TestObject)
public class TestObject:NSManagedObject,Encodable
{

@nonobjc public class func fetchRequest() -> NSFetchRequest<TestObject> {
    return NSFetchRequest<TestObject>(entityName: "TestObject")
}


@NSManaged public var testName: String?
@NSManaged public var devices: NSOrderedSet?  // of entity type "Device"

enum CodingKeys: String, CodingKey {
    case testName
    case devices

}
public func encode(to encoder: Encoder) throws {
     var container = encoder.container(keyedBy:CodingKeys.self)
    try container.encode(testName,forKey:.testName)
    try container.encode(devices,forKey:.devices)
}
}

public required convenience init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
    try container.decode(testName,forKey:.testName)
    try container.decode(devices,forKey:.devices)

}

它给出错误: 编译器给出这个错误

No 'decode' candidates produce the expected contextual result type 'NSOrderedSet?'

最佳答案

您可以通过利用自动生成的访问器之一来完成此操作。

//addToDevices(_ value: Device) 

public required convenience init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    self.testName = try container.decode(String.self, forKey: .testName)
    let devices = try container.decode([Device].self, forKey:.devices)
    devices.forEach { self.addToDevices($0) }
}

如果您没有自动生成的访问器,请按照以下步骤操作

  1. 选择您的项目数据模型文件
  2. 选择菜单栏上苹果左侧第 7 个“编辑器”
  3. 选择“创建 NSManagedObject 子类
  4. 选中数据模型旁边的复选框
  5. 选中您要使用的实体的复选框
  6. 选择“创建”

关于core-data - 使实体关系可编码/可解码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50735042/

相关文章:

ios - 如何从 UITableView swift 4 中删除一行,其中使用 CoreData 存储数据?

ios - 谷歌地图使用 URL 方案,源位置在 map 中正确显示,目标位置未正确显示

ios - 如何在 TableView Controller 后面应用渐变?

swift - WKInterfaceTable 未填充可编码数据

ios - 如何使用 Swift Codable 将复杂的 Json 打印到 CollectionView?

json - 如何在 Swift 中将 JSON 解码和编码为通用结构

macos - 使用核心数据时的 EXC_BAD_ACCESS

swift - 如何使用标签通过单元格内的按钮删除单个 Collection View 单元格

ios - 如何最好地构建代码以在 iOS 中使用 AFNetworking 和 CoreData 下载资源

ios - NSBatchDeleteRequest 导致合并冲突