2017-05-26 10 views
1

私はすぐに一緒に連結したサウンドの配列を保存しようとしていますが、後でそれらをロードします。しかし、すべてのデータが正しく保存されますが、ロードしようとすると、データが保持していたすべてのプロパティは存在しなくなりましたが、保存したときのプロパティがなくても既存のものとしてカウントされます。なぜこれが起こるのか混乱しています保存したユーザーデータがすばやく正しく読み込まれないのはなぜですか?

struct saveSound{ 
static func save(newSound: mergedSound = mergedSound()){ 
    if newSound.soundName == "" || newSound.soundUrl == "" { print("no new data") ; return} 
    var sounds = loadSounds.getSounds() 
    sounds.append(newSound) 
    let archive = NSKeyedArchiver.archivedData(withRootObject: sounds) 
    for soun in sounds{ 

     print(soun.soundName," - saved") 
    } 
    UserDefaults.standard.set(archive, forKey: "SavedSounds") 
} 
} 
struct loadSounds { 

static func getSounds() -> [mergedSound]{ 

    var sounds = [mergedSound]() 
    var data = Data() 
    if UserDefaults.standard.object(forKey: "SavedSounds") as? Data != nil { 
     print("data exists") 
     data = UserDefaults.standard.object(forKey: "SavedSounds") as! Data 
     sounds = NSKeyedUnarchiver.unarchiveObject(with: data) as! [mergedSound] 
     for souns in sounds{ 
      print(souns.soundName,sounds.count, " - loaded") 
     } 

    } 
    return sounds 
} 
} 
+0

サイドポイント:このようなアプリケーションリソースを保存するには、ユーザーのデフォルトは*良い場所ではありません。変更がない場合はアプリケーションバンドルに、そうであればApplication Supportフォルダにそれらを含める必要があります。 –

+0

すばやくファイル操作を始めたばかりの人は、デフォルトに保存するのは良いことではない理由を説明できますか?わかりました –

+0

設定を表す小さな情報を保持するシステムのデータが多すぎます。 iCloud-syncのアプリケーションでは、そのような巨大なデータが同期を大幅に遅くします。アプリの起動時間も影響を受ける可能性があります。 –

答えて

1

あなたのデータは実際に保存されていますか?確認するためにPLISTファイルの設定を調べましたか?あなたのlogステートメントは、この仮定を実際に検証するために何もしません。

また、SoundクラスNSCodingに準拠していますか?各プロパティをアーカイブ/アーカイブ解除するプロトコルを実装していますか?そうでない場合(コンプライアンスを宣言しても、クラスのカスタムプロパティを処理しない場合)、それらは決して書き込まれない(または読み取られる)ことになり、アーカイブされていないインスタンスにはデフォルト値が設定されます。

+0

i don私は間違いなくそのようにしなかったので、どのように私のクラスをnscodingに準拠させるだろう –

+0

あなたはいくつかの読書があります。設定は〜/ Library/Preferences(〜はあなたのホームフォルダです)に保存されます。注意〜/ライブラリは隠しフォルダです。 –

関連する問題