2016-05-11 13 views
2

私は迅速に新しいですが、私はアラームを作成しようとしていますが、エラーが発生します。 以下のコードのようにNSUserDefaultsを使用できますか?このエラーを解決するにはどうすればよいですか?エラーを取得しました 'NSTaggedPointerString'型の値を 'NSArray'にキャストできません

私が手にエラーがある:

Could not cast value of type 'NSTaggedPointerString' to 'NSArray' 

と、この行で発生します。

let alarms = defaults.objectForKey("Alarms") as! [String] 

私のクラス全体:

class Alarm { 

    // MARK: - Declare 2 fields just time and switch in alarm 

    var time: String = "" 
    var stateSwitch: Bool = false 

    // MARK: - Initalize 
    init(time: String , turnOn: Bool) { 
     self.time = time 
     self.stateSwitch = turnOn 
    } 


    class func getAllAlarm() -> [Alarm] { 

     var alarms = [Alarm]() 
     let times = getAllTimes() 
     let stateSwitchs = getAllSwitchs() 

     for i in 0...times.count { 

      let alarm = Alarm(time: times[i], turnOn: stateSwitchs[i]) 

      alarms.append(alarm) 

     } 

     return alarms 
    } 

    private class func getAllTimes() -> [String]{ 

     let defaults = NSUserDefaults.standardUserDefaults() 

     let alarms = defaults.objectForKey("Alarms") as! [String] 
     return alarms 
    } 

    private class func getAllSwitchs() -> [Bool]{ 
     let defaults = NSUserDefaults.standardUserDefaults() 

     let stateSwitchs = defaults.objectForKey("Switchs") as! [Bool] 
     return stateSwitchs 
    } 

} 
+1

「アラーム」キーでNSUserDefaultsに以前にStringオブジェクトを保存しているため、[String]として変換できないようです。 – Larme

答えて

0

あなたがオブジェクトを取得するために正しくNSUserdefaultsを使用しています。問題は、おそらくデータを設定する場所です。機能getAllTimes

as! [String] 

力のキャストを行い、それはあなたがString配列に取得するものは何でもオブジェクトキャストします。そのオブジェクトをキャストできない場合(異なるタイプを挿入したため)、これは失敗します。

つまり、文字列配列をNSUserdefaultsに保存した場合、これは成功します。

NSUserDefaultsに保存するコードを表示する必要があります。

関連する問題