How can I convert an array of custom class type to Data?

35 Views Asked by At

I am using MultipeerConnectivity. I need to convert my [Move?] array to data when sharing between two devices.

first i create my moves variable.

@Published var moves: [Move?] = Array(repeating: nil, count: 9)

here I am trying to convert [Moves?] Array to Data but I am getting error here. Why ?

NSKeyedArchiver.archivedData throws an error.

Error:

Thread 1: signal SIGABRT

NSForwarding: warning: object 0x6000029c64f0 of class 'MultipleTicTacToe.Move' does not implement methodSignatureForSelector: -- trouble ahead

Array to Data Function:

func sendMoves(moves: [Move?]) {
    if session.connectedPeers.count > 0 {
        do {
            let encodedData = try NSKeyedArchiver.archivedData(withRootObject: moves, requiringSecureCoding: true)
            try self.session.send(encodedData, toPeers: session.connectedPeers, with: .unreliable)
        } catch let error {
            print(error.localizedDescription)
        }
    }
}

My Model:

enum Player {
    case player1
    case player2
    case ai
    case none
}

class Move {
    
    let player: Player
    let boardIndex: Int
    var indicator: UIBezierPath
    
    init(player: Player, boardIndex: Int, indicator: UIBezierPath) {
        self.player = player
        self.boardIndex = boardIndex
        self.indicator = indicator
    }
}
0

There are 0 best solutions below