0

オブジェクトを Windows Phone の分離ストレージ システムに保存および取得するクラスを作成しました。見てください...

public class DataCache
{
    // Method to store an object to phone ************************************
    public void StoreToPhone(string key, Object objectToStore)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;

        try
        {
            if (existsInStorage(key))
            {
                settings.Remove(key);
                settings.Add(key, objectToStore);
            }
            else
            {
                settings.Add(key, objectToStore);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show("An error occured while trying to cache data: " + e.Message);
        }
    }

    // Method to retrieve an object ******************************************
    public Object retrieveFromPhone(string key)
    {            
        var settings = IsolatedStorageSettings.ApplicationSettings;            
        Object retrievedObject = null;

        try
        {
            if (existsInStorage(key))
            {
                settings.TryGetValue<Object>(key, out retrievedObject);
            }
            else
            {
                MessageBox.Show(string.Format("Cannot find key {0} in isolated storage", key));
            }
        }
        catch(Exception e)
        {
            MessageBox.Show("An error occured while trying to retrieve cache object: "+e.Message);
        }
        return retrievedObject;
    }

    // Helper method to check if there is space on the phone to cache the data
    private bool IsSpaceAvailable(long spaceReq)
    {
        using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
        {
            long spaceAvail = store.AvailableFreeSpace;
            if (spaceReq > spaceAvail)
            {
                return false;
            }
            return true;
        }
    }

    // Method to check if key exists in isolated storage *********************
    public bool existsInStorage(string key)
    {
        var settings = IsolatedStorageSettings.ApplicationSettings;
        bool objectExistsInStorage = settings.Contains(key);
        return objectExistsInStorage;
    }
}

アプリを実行し、StoreToPhone() メソッドを使用してデータを保存しようとすると、次のエラーが発生します。

データをキャッシュしようとしているときにエラーが発生しました: 値が期待される範囲内にありません

これが何を意味するのか正確にはわかりません..このタイプのオブジェクトを期待していませんか? よくわかりません...私が書いたカスタムクラスを渡しています。

4

1 に答える 1

1

私も同じ問題に遭遇する前に何度か。

「ストレージに重複する値がある可能性があります」というエラーが表示されているようです。そのため、「追加」の前に「削除」を使用しましたが、すべてが保存されていないこともわかったため、「追加」の後に「保存」機能を使用しました。

それは私のために働いた...

IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
  appSettings.Remove("name");
  appSettings.Add("name", "James Carter");
  appSettings.Save();
  tbResults.Text = (string)appSettings["name"];
于 2012-11-29T06:33:29.643 に答える