3

List<Hashtable>MonoTouch アプリに があり、設定に保持する必要があります 。NSUserDefaultsただし、 から継承するもののみを取り込みますNSObject

NSObject設定に保存できる にリストをラップする簡単な方法はありますか、またはHashtableを JSON 文字列 (または同様のもの) にエンコードおよびデコードする簡単な一般的な方法はありますか?

または、s の小さなリストを永続化するための MonoTouch の代替手段はありHashtableますか?

4

2 に答える 2

3

@Maximが言ったように、いくつかのアプローチが利用可能です。データを保存するために使用する場合はNSUserDefaults、次のいずれかにシリアル化できます (MonoTouch を使用して利用できる .NET 機能)。

  • バイナリ形式。次に、Stream(またはbyte[]) を使用して、NSData格納できるインスタンスを作成しますNSUserDefaults。また

  • 文字列に変換し、それを として格納しますNSString(stringオーバーロードも使用できますが、NSString変換は行われます);

于 2013-01-14T22:08:54.047 に答える
3

データを SQLite テーブルに保存してみませんか?

フィールドを持つ静かでシンプルなテーブルを作成できます。

  • id - auto inc int - 主キー。
  • リスト名 - 文字列 - 正確なリストを識別するため。
  • リスト データ - byte[] - リストのデータ。

List -> byte[] (およびその逆) 変換の場合、次のようなコードを使用してみてください。

public static class Bytes
{
    /// <summary>
    /// Function to get byte array from a object
    /// </summary>
    /// <param name="_Object">object to get byte array</param>
    /// <returns>Byte Array</returns>
    public static byte[] ObjectToByteArray (object obj)
    {
        try {
            var _MemoryStream = new MemoryStream ();
            var _BinaryFormatter = new BinaryFormatter ();
            _BinaryFormatter.Serialize (_MemoryStream, obj);
            return _MemoryStream.ToArray ();
        } catch (Exception _Exception) {
            Console.WriteLine ("Exception caught in process: {0}", _Exception.ToString ());
        }

        return null;
    }

    public static T ByteArrayToObject<T> (byte[] arrBytes)
    {
        var memStream = new MemoryStream ();
        var binForm = new BinaryFormatter ();

        memStream.Write (arrBytes, 0, arrBytes.Length);
        memStream.Seek (0, SeekOrigin.Begin);

        var result = default(T);
        try {
            result = (T)binForm.Deserialize (memStream);

        } catch (Exception ex) {
            Console.WriteLine ("Deserialize error {0}", ex);
        }


        return result;
    }
}
于 2013-01-14T16:30:02.570 に答える