嘗試使用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 Functionsfunc 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,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,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:]:發送到實例得無法識別得選擇器全部內容,希望內容能夠幫你解決ios – – [_ SwiftValue encodeWithCoder:]:發送到實例得無法識別得選擇器所遇到得程序開發問題。
如果覺得來客網網站內容還不錯,歡迎將來客網網站推薦給程序員好友。
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。