使用 NSuserdefaults 在 Swift 中发出 SIGABRT 信号

Signal SIGABRT in Swift using NSuserdefaults

我正在构建一个 swift 游戏,需要设置一个 class。我的代码适用于我 class 中的所有元素,但不适用于此。

func saveInformationMember(){

var MembersDefaultName = NSUserDefaults.standardUserDefaults()
MembersDefaultName.setValue(globalCurrentMembers, forKey: "globalCurrentMembersData")
MembersDefaultName.synchronize()

}

GlobalCurrentMembersMember 的数组,看起来像这样:

class Member {
var image = String ()
var name = String ()
var progression = Int()
var round = Int()
var level = Int()
var imageProgression = [UIButton]()


func Init(){
    image = "default.png"
    name = "default"
    progression = 0
    round = 0
    level = 0
}

要以这种方式保存您的 class,Member 需要遵守 NSCoding 协议。

感谢 Aaron Brager 的回应。这是回应:

func saveInformationMember(){
let data = NSKeyedArchiver.archivedDataWithRootObject(globalCurrentMembers)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "member")}

func loadInformationMember(){

if let data = NSUserDefaults.standardUserDefaults().objectForKey("member") as? NSData {
globalCurrentMembers = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [Member]
}

还有我的class:

class Member : NSObject, NSCoding {
var image = String ()
var name = String ()
var progression = Int()
var round = Int()
var level = Int()
var imageProgression = [UIButton]()


func initiation(){
    image = "default.png"
    name = "default"
    progression = 0
    round = 0
    level = 0
}

required convenience init(coder decoder: NSCoder) {
    self.init()
    self.image = decoder.decodeObjectForKey("image") as String!
    self.name = decoder.decodeObjectForKey("name") as String!
    self.progression = decoder.decodeIntegerForKey("progression") as Int!
    self.round = decoder.decodeIntegerForKey("round") as Int!
    self.level = decoder.decodeIntegerForKey("level") as Int!
}

func encodeWithCoder(coder: NSCoder) {
    coder.encodeObject(self.image, forKey: "image")
    coder.encodeObject(self.name, forKey: "name")
    coder.encodeInt(Int32(self.progression), forKey: "progression")
    coder.encodeInt(Int32(self.round), forKey: "round")
    coder.encodeInt(Int32(self.level), forKey: "level")
}}