Reputation: 877
I'm building a swift game and a need to set up some images. My code works with string or integer:
for var i = 0; i < globalCurrentMembers.count; ++i {
var MembersDefaultName = NSUserDefaults.standardUserDefaults()
MembersDefaultName.setValue(globalCurrentMembers[i].name, forKey: "globalCurrentMembersName\(i)")
MembersDefaultName.synchronize()
}
But I have an error for an image
for var i = 0; i < globalCurrentMembers.count; ++i {
var MembersDefaultImage = NSUserDefaults.standardUserDefaults()
MembersDefaultImage.setValue(globalCurrentMembers[i].image,
forKey: "globalCurrentMembersImage\(i)")
MembersDefaultImage.synchronize()
}
globalCurrentMembers
is an array of Member
which looks like that:
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
}
}
So please can you tell me how doing that.
Upvotes: 0
Views: 2536
Reputation: 6921
UIImage does not implement NSCoding protocol, you need to convert UIImage to NSData first.
Change your code to the following:
var imageData = UIImagePNGRepresentation(globalCurrentMembers[i].image)
var myEncodedImageData = NSKeyedArchiver.archivedDataWithRootObject(imageData)
MembersDefaultImage.setObject(myEncodedImageData, forKey: "globalCurrentMembersImage\(i)")
Of course storing image to NSUserDefaults is not the best practice, you should store your image in some file directory.
Upvotes: 1
Reputation: 41801
You can't store images in NSUserDefaults. Have you considered storing just the path to the image, or the name of the image, instead? That would be enormously more efficient, and also work.
Upvotes: 1