swift
1import UIKit 2 3class ViewController:UIViewController ,UITextFieldDelegate { 4 5 6 @IBOutlet weak var result: UILabel! 7 8 @IBAction func save(_ sender: Any) { 9 let setting = 1 10 let encodedData = NSKeyedArchiver.archivedData(withRootObject: setting) 11 UserDefaults.standard.set(encodedData, forKey: "volume") 12 13 } 14 15 16 @IBAction func read(_ sender: Any) { 17 18 let anyObject: AnyObject! = UserDefaults.standard.object(forKey: "volume") as AnyObject 19 var userDefaluts:UserDefalutsController 20 21 if UserDefaults.standard.data(forKey: "volume") != nil { 22 //↓の行でエラー 23 userDefaluts = NSKeyedUnarchiver.unarchiveObject(with: (anyObject as! NSData) as Data) as! UserDefalutsController 24 25 26 userDefaluts.setAddNum(1) 27 result.text = String("(userDefaluts.getNum())") 28 } 29 30 } 31 32}
Swift
1import Foundation 2 3 4class UserDefalutsController: NSObject,NSCoding{ 5 let sourceName: String 6 var value: Double 7 8 init(sourceName: String, value: Double) { 9 self.sourceName = sourceName 10 self.value = value 11 } 12 required init(coder decoder: NSCoder) { 13 self.sourceName = decoder.decodeObject(forKey: "sourceName") as? String ?? "" 14 self.value = decoder.decodeDouble(forKey: "value") 15 } 16 17 func encode(with coder: NSCoder) { 18 coder.encode(sourceName, forKey: "sourceName") 19 coder.encode(value, forKey: "value") 20 } 21 22 func setAddNum(_ numner:Double){ 23 value += numner 24 } 25 func getNum() -> Double{ 26 return value 27 } 28 29}
NSObjectを使って、ファイルに、クラスを保存しのち、そのクラスを再利用したいです。
いくつか書き方が間違っているところがあると思いますが以下のエラーを最優先で解消したいです。
Could not cast value of type '__NSCFNumber' (0x1101662e8) to 'UserDefalults.UserDefalutsController' (0x10ec2ccb8).
2018-05-31 11:31:06.443461+0900 UserDefalults[2293:406973] Could not cast value of type '__NSCFNumber' (0x1101662e8) to 'UserDefalults.UserDefalutsController' (0x10ec2ccb8).
(lldb)
参考資料としてここをみながら試行錯誤で書きました。
http://blog.kaerusystem.jp/article/434175557.html
なぜキャストできないのかわかりませんか?