Почему изолированное хранилище не сохраняется в моем приложении WP7? - PullRequest
1 голос
/ 02 декабря 2010

Я использую IsolatedStorageSettings.ApplicationSettings для моего приложения.Весь код, связанный с изолированным хранилищем, встречается в моих методах Application_Launching, Application_Activation, Application_Closing и Application_Deactivation следующим образом:

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».Оставив эмулятор запущенным, я попытался снова открыть приложение с помощью кнопки «Назад» и перейти к списку приложений и открыть его.

Проблема, с которой я столкнулся, заключается в том, что при загрузке или активации настроек. Содержит ["myObjList"]возвращает false и продолжает снова добавлять ключ к настройкам.

Кто-нибудь видит, почему мой ключ настроек (и значение) не сохраняется?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Является ли ваш класс 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; }
2 голосов
/ 02 декабря 2010

Я вижу некоторые проблемы:

  1. Документ IsolatedStorageSettings явно говорит не о вызове Save (), поскольку он не безопасен для потоков (прокрутите вниз до примечаний платформы для WP) и может вызвать исключение и ваши настройки не будут сохранены).

  2. Кажется, что это не так, но использование строки «myObjList» вокруг довольно опасно, так как ее легко неправильно ввести. Я бы поместил его в константу и исключил любую ошибку при печати

  3. По моему опыту IsolatedStorageSettings не очень устойчив в текущей версии WP7. Вам лучше создать класс и сериализовать его в файл IsolatedStorage. В любом случае, продолжая работу с вашим приложением, у вас, вероятно, будет больше вещей для сохранения, и вы получите более чистый код таким образом.

...