1

私のアプリケーションにIsolatedStorageSettings.ApplicationSettingsを使用しています。WP7アプリケーションで隔離されたストレージが持続しないのはなぜですか?

public IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 


private void Application_Launching(object sender, LaunchingEventArgs e) 
{ 
     if (settings.Contains("myObjList")) 
     { 
      App.ObjList = (ObservableCollection<myObj>)settings["myObjList"]; 
     } 
     else 
     { 
      settings.Add("myObjList", App.ObjList); 
     } 
} 

private void Application_Activated(object sender, ActivatedEventArgs e) 
{ 
    if (settings.Contains("myObjList")) 
    { 
     App.ObjList = (ObservableCollection<myObj>)settings["myObjList"]; 
    } 
    else 
    { 
     settings.Add("myObjList", App.ObjList); 
    } 
} 
private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
{ 

    settings["myObjList"] = App.ObjList; 
    settings.Save(); 
} 
private void Application_Closing(object sender, ClosingEventArgs e) 
{ 
    settings["myObjList"] = App.ObjList; 
    settings.Save(); 
} 

このすべては、すべての新しいアプリケーションでデフォルトで作成されたApp.xaml.csファイルで発生して次のように分離ストレージに関連したすべてのコードが、私のApplication_LaunchingにApplication_Activated、Application_Closing、およびApplication_Deactivated方法を発生します。

私は窓のボタンを使用することによってだけでなく、[戻る]ボタンを使用してアプリケーションを終了しようとしています。エミュレータを起動したまま、戻るボタンを使用してアプリケーションを再度開き、アプリケーションリストに移動して開きます。

私が午前問題は、負荷や活性化settings.Containsに[「myObjList」]がfalseを返すと、再びすべての上の設定にキーを追加するために進めているということです。

私の設定キー(および値)が永続化されていない理由を誰が見るのか?

答えて

2

私はいくつかの問題を参照してください。

  1. IsolatedStorageSettings docは、明示的に(が、それはスレッドセーフではないので、保存を()を呼び出すために(WP用のプラットフォーム・ノートをスクロールダウン)と例外を発生させることがない言うとあなたの設定を保存しないでください)。

  2. ここはケースではないようだが、それはmispellするのは簡単ですように、すべての周りの文字列「myObjList」を使用すると、かなり危険です。私は定数の中に入れて入力エラーを除外します。

  3. In my experience IsolatedStorageSettingsは現在のWP7バージョンではあまり堅牢ではありません。クラスを作成し、それをIsolatedStorageファイルに直列化する方がよいでしょう。とにかにあなたのアプリで続行すると、おそらくもっと節約できることがありますし、そのようにきれいなコードを持つでしょう。

+0

ありがとう!私は実際にmyObjListを使用していません、私はそれを私の例として挙げています。あなたの他の点については、それらを考慮に入れてください。 – andersra

+0

また、私を#3のチュートリアル/例にリンクしてもよろしいですか?私はxmlのシリアル化またはバイナリのどちらを取るべきかについて迷っています... – andersra

+0

これは、IsolatedStorageで始めることができます:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone- 7c-Day-15-Isolated-Storage.aspx、これはDataContractSerializerの良い例です:http://onishimura.com/2010/07/25/windows-phone-7-tutorial-creating-a-simple-notes -app-with-silverlight-part-1/ –

3

あなたのクラスはmyObj Serializableですか?経験から、エラーがスローされない場合は、単にIsolatedStorageに追加されません。

あなたはのDataContractとデータメンバーは次のようにこれを有効にするには、あなたのクラスの属性を使用することができます。偉大なアドバイスを

[DataContract] 
public class myObj 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public string Id { get; set; } 

    [DataMember] 
    public string Phone { get; set; } 
+0

助けてくれてありがとう!これはもう少し一緒に私を得た、私はもう少し実験し、私が思い付くものを参照してください。 – andersra

関連する問題