使用 NSuserdefaults 在 swift 中设置图像

Setting Up an image in swift using NSuserdefaults

我正在构建一个 swift 游戏并且需要设置一些图像。 我的代码适用于字符串或整数:

for var i = 0; i < globalCurrentMembers.count; ++i {
    var MembersDefaultName = NSUserDefaults.standardUserDefaults()
    MembersDefaultName.setValue(globalCurrentMembers[i].name, forKey: "globalCurrentMembersName\(i)")
    MembersDefaultName.synchronize()
}

但是我有一个图像错误

for var i = 0; i < globalCurrentMembers.count; ++i {
    var MembersDefaultImage = NSUserDefaults.standardUserDefaults()
    MembersDefaultImage.setValue(globalCurrentMembers[i].image, 
                        forKey: "globalCurrentMembersImage\(i)")
    MembersDefaultImage.synchronize()
}

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

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


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

所以请你告诉我怎么做。

您不能在 NSUserDefaults 中存储图像。您是否考虑过只存储图像的路径或图像的名称?这将大大提高效率,并且也有效。

UIImage没有实现NSCoding协议,需要先将UIImage转成NSData

将您的代码更改为以下内容:

  var imageData = UIImagePNGRepresentation(globalCurrentMembers[i].image)
  var myEncodedImageData = NSKeyedArchiver.archivedDataWithRootObject(imageData)
  MembersDefaultImage.setObject(myEncodedImageData, forKey: "globalCurrentMembersImage\(i)")

当然将图像存储到 NSUserDefaults 不是最佳做法,您应该将图像存储在某个文件目录中。