为什么隔离存储不会在我的WP7应用程序中持续存在?

时间:2010-12-02 01:58:05

标签: c# windows-phone-7 persistence isolatedstorage application-settings

我正在为我的应用程序使用IsolatedStorageSettings.ApplicationSettings。与隔离存储相关的所有代码都发生在我的Application_Launching,Application_Activated,Application_Closing和Application_Deactivated方法中,如下所示:

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文件中。

我尝试使用后退按钮以及使用Windows按钮退出应用程序。让仿真器保持运行,我尝试使用后退按钮重新打开应用程序,然后导航到应用程序列表并打开。

我遇到的问题是在加载或激活settings.Contains [“myObjList”]返回false并继续将键重新添加到设置中。

有没有人知道为什么我的设置键(和值)不会持续存在?

2 个答案:

答案 0 :(得分:3)

你的班级是myObj Serializable吗?根据经验,如果没有,则不会抛出任何错误,它根本不会添加到IsolatedStorage。

您可以使用类中的DataContract和DataMember属性来启用此功能,如下所示。

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

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

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

答案 1 :(得分:2)

我看到了一些问题:

  1. IsolatedStorageSettings doc明确表示调用Save(),因为它不是线程安全的(向下滚动到WP的平台说明)并可能引发异常(并导致你的设置不能保存。)

  2. 这里似乎不是这种情况,但是使用字符串“myObjList”非常危险,因为它很容易被误解。我会把它放在常量中并排除任何输入错误

  3. In my experience IsolatedStorageSettings在当前的WP7版本上不是很强大。您最好创建一个类并将其序列化为IsolatedStorage文件。无论如何继续你的应用程序你可能会有更多的东西要保存,你会有更清晰的代码。