gpt4 book ai didi

ios - -[_SwiftValue encodeWithCoder :]: unrecognized selector sent to instance

转载 作者:IT王子 更新时间:2023-10-29 05:50:09 24 4
gpt4 key购买 nike

尝试使用 NSCoder 时出现错误

Player.swift:

class Player: NSObject, NSCoding {

private var _playerName: String!
private var _playerScore: Int!
private var _playerColor: PlayerColor! //PlayerColor is an enum

var playerName: String {
get {
return _playerName
}
set {
_playerName = newValue
}
}

var playerScore: Int {
get {
return _playerScore
}
set {
_playerScore = newValue
}
}

var playerColor: PlayerColor {
get {
return _playerColor
}
set {
_playerColor = newValue
}
}

init(playerName: String, playerScore: Int, playerColor: PlayerColor) {

_playerName = playerName
_playerScore = playerScore
_playerColor = playerColor
}

required convenience init(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObject(forKey: "name") as! String
let score = aDecoder.decodeInteger(forKey: "score")
let color = aDecoder.decodeObject(forKey: "color") as! PlayerColor
self.init(playerName: name, playerScore: score, playerColor: color)
}

func encode(with aCoder: NSCoder){
aCoder.encode(playerName, forKey: "name")
aCoder.encode(playerScore, forKey: "score")
aCoder.encode(playerColor, forKey: "color")
}

}

在 PlayerStore.swift 中:

// Storage Functions
func savePlayers(){
let encodedData = NSKeyedArchiver.archivedData(withRootObject: _playerArray) // _playerarray is a [Player] the very object I want to store/retrieve at will
defaults.set(encodedData, forKey: playerKeyForDefaults) //defaults is just var NSUserDefaults.standard
defaults.synchronize()
}

func loadPlayers(){
if let decoded = defaults.object(forKey: playerKeyForDefaults) as? NSData {
let array = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data) as! [Player]
_playerArray = array
}

}

最佳答案

这是我实现的解决方案:

Player.swift:

import Foundation

class Player: NSObject, NSCoding {

private var name: String!
private var score: Int!
private var color: String!

var playerName: String {
get {
return name
}
set {
name = newValue
}
}

var playerScore: Int {
get {
return score
}
set {
score = newValue
}
}

var playerColor: String {
get {
return color
}
set {
color = newValue
}
}

init(playerName: String, playerScore: Int, playerColor: String) {

name = playerName
score = playerScore
color = playerColor
}

required convenience init(coder aDecoder: NSCoder) {
let name = aDecoder.decodeObject(forKey: "name") as! String
let score = aDecoder.decodeObject(forKey: "score") as! Int
let color = aDecoder.decodeObject(forKey: "color") as! String
self.init(playerName: name, playerScore: score, playerColor: color)
}

func encode(with aCoder: NSCoder){
aCoder.encode(name, forKey: "name")
aCoder.encode(score, forKey: "score")
aCoder.encode(color, forKey: "color")
}

}

PlayerStore.swift:

func savePlayers(){
let encodedData = NSKeyedArchiver.archivedData(withRootObject: _playerArray)
defaults.set(encodedData, forKey: playerKeyForDefaults)
}

func loadPlayers(){
if let decoded = defaults.object(forKey: playerKeyForDefaults) as? NSData {
let array = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data) as! [Player]
_playerArray = array
}

}

关于ios - -[_SwiftValue encodeWithCoder :]: unrecognized selector sent to instance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39880459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com