Skip to content

Doesn’t encode object with NSSet? property #1

@ns-vasilev

Description

@ns-vasilev

I'm trying to encode the following model:

final class ManagedHabit: NSManagedObject, CoreDataCodable {
    @NSManaged var id: String
    @NSManaged var name: String
    @NSManaged var notifications: NSSet?
    
    enum CodingKeys: String, CoreDataCodingKey {
        case id
        case name
        case notifications
    }
}

final class ManagedNotification: NSManagedObject, CoreDataCodable {
    @NSManaged var id: String
    @NSManaged var userNotificationId: String
    @NSManaged var enabled: Bool
    @NSManaged var habit: ManagedHabit
    
    enum CodingKeys: String, CoreDataCodingKey {
        case id
	case userNotificationId
	case enabled
    }
}

…

let encoder = JSONEncoder()
let jsonData = try encoder.encode(object)

I get an error.

The CoreDataEncoder class contains a method

private func encode (_ relationship: NSRelationshipDescription, object: ManagedObject, key: Keys, container: KeyedContainer) throws

that uses NSStringFromClass in its implementation, which always returns nil. This is because you need to use NSClassFromString(“<ModuleName>.<ClassName>”). I checked this and it works.

The same problem is present in the CoreDataDecodable extension in the method

private func set (_ relationship: NSRelationshipDescription, from container: CoreDataKeyedDecodingContainer <Self>, with codingKey: CodingKeys) throws

Please, can you fix this?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions