- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
尝试使用 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/
您好,我在我的 ios 应用程序中使用 GoogleMaps,并且有一部分我必须在 CoreData 中保存 map 标记位置.我正在使用代码 GMSMarker *marker = [GMSMark
假设我有一个对象 Person。(我知道 Person 有语法错误。请忽略这些错误。) class Person: NSObject, NSCoding { var name : String
我有一个对象,其属性可能为 nil。我应该如何在 encodeWithCoder(和 decodeWithCoder)中实现它? - (void)encodeWithCoder:(NSCoder *)
我正在尝试使用 NSCoding 来保存和恢复应用程序状态。我以前没用过。 在我的应用程序中,协议(protocol)方法 encodeWithCoder 和 initWithCoder 从未被调用。
我第一次使用编码是为了将数据保存在我的应用程序之外。我一直在看的例子说要为自定义类调用 [super encodeWithCoder:coder]; 。 我有一个扩展 NSObject 的类,但收到下
我遇到了这个错误,但我不知道如何修复它。我刚刚添加了来自 Apple 示例 (LazyTableImages) 的延迟加载以及来自照片位置示例项目的 UIImageToDataTransformer
这将保存一个数组(我认为)。 - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:myArray forKey
我正在尝试用restkit中的值填充字典。我在restEngine.m中使用NSUserDefaults保存字典。 NSDictionary *dict = [mappingResult dicti
我在重写 encodeWithCoder: 方法时遇到了一个非常奇怪的崩溃。你可以在 https://github.com/reidmain/FDModel/blob/193b0661f7ab1ce6
我们正在开发一款可以将大量内容保存到 Core Data 中的应用程序。它保存的东西主要是NSDate NSNumber & NSString 但它也将很多图片和视频保存为NSData。我正在尝试更改
我知道当你编写实现 NSCoding 的对象的子类的 initWithCoder 方法时,你必须调用 super initWithCoder(而不是 super init),但是我必须在encodeW
尝试使用 NSCoder 时出现错误 Player.swift: class Player: NSObject, NSCoding { private var _playerName: Str
我的自定义对象使用以下方法符合 NSCoding 协议(protocol) required init(coder decoder: NSCoder) { super.init() c
这个问题已经有答案了: NSKeyedUnarchiver unarchiveObjectWithData:data returns non nil object but with nil prope
我正在尝试保存一个名为 queueArray 的 NSMutableArray,以便在应用程序退出后可以再次加载它。我使用了一些教程来帮助我前进,这是我想出的代码。问题似乎是“initWithCode
我有一个自定义类 MyClass,它基本上由几个 NSMutableArrays 组成,没有其他变量。我有一个实体 MyEntity,它有一个属于 MyClass 的 ivar。当我尝试保存实体时,我
错误: Assertion failure in -[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-2372/UIColor.m:1191
我有这个错误。我知道有些人已经在其他线程上回答了这个问题,但给出的答案似乎对我不起作用。 这是我的代码: 人物类: class People: NSObject, NSCoding { var
我知道有几个与此类似的问题,它们往往都围绕着未正确遵守协议(protocol)的类展开,但这不应该是这里的直接问题。 以下是目前给我这个问题的代码的浓缩版: enum Binary: Int {
我在实现 NSCoding 时遇到了问题。这是我的用户类代码: public class User: NSCoder { ... NSCoding 方法: 解码器: required public i
我是一名优秀的程序员,十分优秀!