我无法保存到隔离存储?

时间:2012-03-16 19:51:02

标签: c# windows-phone-7 isolatedstorage

我正在尝试将模型保存在独立存储中:

var settings = IsolatedStorageSettings.ApplicationSettings;

CurrentPlaceNowModel model = new CurrentPlaceNowModel();

settings.TryGetValue<CurrentPlaceNowModel>("model", out model);

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", new CurrentPlaceNowModel());
    settings.Save();
}
else
    MessageBox.Show("NOT NULL");

当我启动emu i ofcourse时出现“NULL”,但是如果我关闭emu上的app并从菜单中再次启动它(为什么我再次在Visual Studio中启动它),为什么还要继续使用它。

第二次我不能得到“NOT NULL”吗?

2 个答案:

答案 0 :(得分:2)

我会以不同方式执行此操作并进行特定检查以查看密钥是否存在。

CurrentPlaceNowModel model; 

using (var settings = IsolatedStorageSettings.ApplicationSettings)
{
    if (settings.Contains("MODEL"))
    {
        model = settings["MODEL"] as CurrentPlaceNowModel;
    }
    else
    {
        model = new CurrentPlaceNowModel();
        settings.Add("MODEL", model);    
        settings.Save();
    }
}

使用IsolatedStorage的这种模式肯定有效。

如果无法使用DataContractSerializer序列化CurrentPlaceNowModel,那么这将无效的唯一原因。这就是ApplicationSettings在内部用于序列化对象的内容 你可以自己用这种方式对它进行测试,看看会发生什么。

答案 1 :(得分:1)

我刚刚注意到你做错了什么:

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", model);
}

这相当于调用settings.Add("model", null) - 所以你希望以后如何获得非空值?我怀疑你想要:

CurrentPlaceNowModel model;

if (!settings.TryGetValue<CurrentPlaceNowModel>("model", out model))
{
    model = new CurrentPlaceNowModel();
    settings.Add("model", model);
}