2017-01-08 16 views
0

私はStopというクラスを持っています。このクラスはNSCodingを実装します。 Stopのインスタンスを問題なくUserDefaultsに保存できます。ここまでは順調ですね。私の問題は、ストップのArrayを保存することです。これは私が試みたものです:Swift:配列をUserDefaultsに保存できません

private func save(stopArray array: [Stop],withKey key: String) { 
     let data = NSKeyedArchiver.archivedData(withRootObject: array) 
     self.userDefaults.set(data, forKey: key) 
     self.userDefaults.synchronize() 
    } 

private func loadStopArray(key: String) -> [Stop]? { 
     guard let data = self.userDefaults.object(forKey: key) as? Data else { 
      return nil 
     } 
     return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
} 

私がloadStopArrayを呼び出すたびに、私は空の配列を取得します。無名ではなく、ただ空の配列です。

アイデア?ありがとう!

+1

何が起きているのかを判断するために、私はあなたのストップの実装を確認する必要があると思います。 – matt

+0

保存して取得するときに同じ正確なキーを使用していますか? –

+0

@mattあなたは正しかった、私のNSCoderのコンストラクタはnilを返していた...ありがとう! – Yotam

答えて

1

ローディングObjectDataを混同しています。 self.userDefaults.object()~self.userDefaults.data()が得られます。

private func loadStopArray(key: String) -> [Stop]? { 
     if let data = self.userDefaults.data(forKey: key) { 
      return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop] 
     } else { 
      return nil 
     } 
} 
関連する問題