###前提・実現したいこと
swiftでカスタムクラス(DataCollection型)を、NSUserDefaultsを使用して保存したいのですが
Buildした時点でエラーが発生してしまいます。
カスタムクラス(DataCollection型)の内容はカスタムクラス(Data型)の配列です。
カスタムクラスが入れ子のようになっているのがいけないのでしょうか。。。
###発生している問題・エラーメッセージ
エラーメッセージ
reason: '-[Change.Data initWithCoder:]: unrecognized selector sent to instance
###該当のソースコード
【DataCollection.swift】 import UIKit class DataCollection: NSObject, NSCoding { static let sharedInstance = DataCollection() var datas: [Data] = [] func addDataCollection(data: Data) { self.datas.insert(data, atIndex: 0) } override init() { } func encodeWithCoder(aCoder: NSCoder) { aCoder.encodeObject(datas, forKey: "datas_key") } required init?(coder aDecoder: NSCoder) { self.datas = aDecoder.decodeObjectForKey("datas_key") as! [Data] } }
【Data.swift】 import UIKit class Data: NSObject { var text: String? var currentTime: String? var todoDone: Bool = false }
###試したこと
ViewController.swiftには下記のようなシリアライズ処理を記述しています。
let userDefaults = NSUserDefaults.standardUserDefaults() if let storeData = userDefaults.objectForKey("dataCollection") as? NSData { if let unarchivedData = NSKeyedUnarchiver.unarchiveObjectWithData(storeData) as? DataCollection { self.dataCollection = unarchivedData } } let archiveData = NSKeyedArchiver.archivedDataWithRootObject(self.dataCollection) let userDefaults = NSUserDefaults.standardUserDefaults() userDefaults.setObject(archiveData, forKey: "dataCollection") userDefaults.synchronize()
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode version 7.2.1
エラーが出るのは、Buildした時点ではなく実行したときでしょうか?
回答1件
あなたの回答
tips
プレビュー