2015-03-31 53 views
0

我正在構建一個快速遊戲並需要設置一些圖像。 我的代碼工作與字符串或整數:使用NSuserdefaults快速設置圖像

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 
    } 
} 

所以請你能告訴我怎麼做。

回答

1

UIImage沒有實現NSCoding協議,您需要先將UIImage轉換爲NSData。

你的代碼更改爲以下:

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

當然存儲圖像NSUserDefaults的到的是不是最好的做法,您應該將圖像存儲在一些文件目錄。

+0

Thx爲這個迴應,但我同意@Catfish_Man:我只能存儲圖像的名稱。但它的作品:) – 2015-03-31 22:10:53

1

您不能將圖像存儲在NSUserDefaults中。您是否考慮過僅存儲圖像的路徑或圖像的名稱?這將是非常有效的,也是工作。

+0

這不是我的問題,但你是對的,這是一個更好的主意。多謝。 – 2015-03-31 22:13:56