【发布时间】:2013-04-17 03:04:49
【问题描述】:
我有一个对象要存储在 IsolatedStorageSettings 中,我不想在应用程序重新启动时重复使用它。
我的问题在于我编写的代码由于某种原因在重新启动时尝试访问密钥时不记得该对象。
namespace MyNameSpace
{
public class WindowsPhoneSettings
{
private const string SelectedSiteKey = "SelectedSite";
private IsolatedStorageSettings isolatedStore = IsolatedStorageSettings.ApplicationSettings;
private T RetrieveSetting<T>(string settingKey)
{
object settingValue;
if (isolatedStore.TryGetValue(settingKey, out settingValue))
{
return (T)settingValue;
}
return default(T);
}
public bool AddOrUpdateValue(string Key, Object value)
{
bool valueChanged = false;
if (isolatedStore.Contains(Key))
{
if (isolatedStore[Key] != value)
{
isolatedStore[Key] = value;
valueChanged = true;
}
}
else
{
isolatedStore.Add(Key, value);
valueChanged = true;
}
return valueChanged;
}
public MobileSiteDataModel SelectedSite
{
get
{
return RetrieveSetting<MobileSiteDataModel>(SelectedSiteKey);
}
set
{
AddOrUpdateValue(SelectedSiteKey, value);
isolatedStore.Save();
}
}
}
}
然后我在 App.xaml.cs 中实例化 WindowsPhoneSettings 并为其创建一个公共 getter 和 setter。能够在整个应用程序中访问它。调试这表明正确的对象存储在隔离存储中,但是当关闭应用程序并重新打开它时,隔离存储似乎是空的。我在模拟器和真实设备上都试过了。如您所见,我在设置对象时确实调用了 save 方法。
我在这里做错了什么?
【问题讨论】:
-
我在这里遇到了同样的问题。可以轻松保存字符串、布尔值或整数等简单对象。但是,如果我尝试保存 Song 对象,则似乎在重新启动时会删除所有内容(包括其他值),而不会出现任何错误消息。这可能是一些奇怪的错误,我认为这是一个内部序列化问题。
标签: c# silverlight windows-phone-7 object isolatedstorage