Параметры приложения изолированного хранилища не сохраняются после выхода из приложения - PullRequest
5 голосов
/ 20 мая 2011

У меня большая проблема с использованием изолированного хранилища WP7 и настроек приложения.В качестве основы я использовал код из 101 тома приложения для Windows Phone 7 Адама Натана.

У меня есть страница настроек, на которой можно изменять значения, и пока приложение все еще работает, они остаются активными, и все работает отлично,Однако, как только приложение закрывается на моем телефоне разработчика, они теряются, и приложение перезапускается с настройками по умолчанию.

Я понятия не имею, почему эти значения не сохраняются.Любая помощь будет высоко ценится.

Вот код, который я получил, из новой книги Адама Натана.Я отправил ему сообщение в твиттере, и он сказал, что это связано с типом данных, который не сериализуем.Я посмотрел на это, но я использую только значения double и bool.

public class Setting<T>
{
    string name;
    T value;
    T defaultValue;
    bool hasValue;

    public Setting(string name, T defaultValue)
    {
        this.name = name;
        this.defaultValue = defaultValue;
    }

    public T Value
    {
        get
        {
            //checked for cached value
            if (!this.hasValue)
            {
                //try to get value from isolated storage
                if (IsolatedStorageSettings.ApplicationSettings.TryGetValue(this.name, out this.value))
                {
                    //not set yet
                    this.value = this.defaultValue;
                    IsolatedStorageSettings.ApplicationSettings[this.name] = this.value;
                }

                this.hasValue = true;
            }

            return this.value;
        }

        set
        {
            //save value to isolated storage
            IsolatedStorageSettings.ApplicationSettings[this.name] = value;
            this.value = value;
            this.hasValue = true;
        }
    }

    public T DefaultValue
    {
        get { return this.defaultValue; }
    }

    //clear cached value;
    public void ForceRefresh()
    {
        this.hasValue = false;
    }
}

Дальнейшее развитие:

Я получаю эту ошибку при выходе из приложения:

Сначаласлучайное исключение типа «System.IO.IsolatedStorage.IsolatedStorageException» произошло в mscorlib.dll


ОШИБКА НАЙДЕНА: Я идиот и пропустил один восклицательный знак!из части trygetvalue.

1 Ответ

8 голосов
/ 20 мая 2011

Не могли бы вы опубликовать свой код хранения, чтобы мы могли точно знать, что происходит?В отсутствие этого кода, вот код, который я использую для сохранения настроек в локальном хранилище:

IsolatedStorageSettings isoStoreSettings = IsolatedStorageSettings.ApplicationSettings;
if (isoStoreSettings.Contains(key))
{
    isoStoreSettings[key] = value;
}
else
{
    isoStoreSettings.Add(key, value);
}
isoStoreSettings.Save();

Я предполагаю, что вам не хватает той последней строки, которая фиксирует изменения настроек изолированного хранилища для материализованного изолированногохранить вместо того, чтобы просто оставить их в памяти.Если это не так, пожалуйста, отредактируйте свое сообщение с кодом, чтобы мы могли помочь.

...