[問題] 想把一個Dictionary強制轉型成AnyObject

作者: genesic (嗯?)   2016-04-23 22:44:21
我目前在做練習的專案
想做的事情是這樣:
在view上操作完之後要把detail存起來
在下次打開app的時候可以顯示最後操作的畫面
我google的結果是要用NSUserDefaults的setObject來儲存
不過setObject只能儲存特定格式的object,所以Account裡面的變數要encode
但在encodeWithCoder裡要把detail轉型成AnyObject時一直失敗
(var detail = [NSDate: [Detail]]() )
我想請問要把像detail這樣的結構轉成AnyObject該怎麼轉呢?
如果沒有辦法轉的話,有什麼其他替代的方法可以做到我想要的結果嗎?
簡碼如下,如果有什麼不清楚的地方請告訴我,我會再補充,感謝
Struct Detail {
var name: String
var num: Int
}
Class Account: NSOBject, NSCoding {
var detail = [NSDate : [Detail]]()
required init?(coder aDecoder: NSCoder) {
let decodeObj = aDecoder.decodeObjectForKey("detail")
if let object = decodeObj as? [NSDate: [AccountDetail]] {
detail = object
}
}
func encodeWithCoder(aCoder: NSCoder) {
if let object = detail as? AnyObject { // 這個if一直不會進來
aCoder.encodeObject(object , forKey: "detail")
}
}
}
作者: itisjoe ( _(:3」∠)_)   2016-04-23 23:18:00
改用 AnyAnyObject 只能用在 Class 的 instance 上
作者: johnlinvc (阿翔)   2016-04-23 23:45:00
Dictionary 是Struct 不是 Object
作者: genesic (嗯?)   2016-04-24 00:21:00
感謝回答,我剛試了一下,看來要直接對dictionary做encodeObject是不太可能了,我剛試了用Any就被compiler擋下,我來轉成json試試好了,感謝
作者: uranusjr (←這人是超級笨蛋)   2016-04-24 01:17:00
從 Objective-C 起 dictionary 和 array 就需要特別處裡ObjC 是用 NSKeyedArchiver, Swift 就不知道了但 ObjC 都可以了, Swift 應該沒理由直接 encode 才是
作者: hearther (hearther)   2016-04-26 16:08:00

Links booklink

Contact Us: admin [ a t ] ucptt.com