2012年9月11日火曜日

Preferenceの論理破壊のコメントもらったので、どういう動きになるか試してみたよ。


[インストール直後]
---------------------
設定ファイルなし
---------------------

取得値
-autoboot:初期値(false)
-repeat:初期値(あああ)
-offset:初期値(かかか)


[値を設定]
---------------------
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="offset">かきくけこ</string>
<string name="repeat">あいうえお</string>
<boolean name="autoboot" value="true" />
</map>
---------------------

取得値
-autoboot:設定値(true)
-repeat:設定値(あいうえお)
-offset:設定値(かきくけこ)


[1つをあえて破壊]
---------------------
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="offset">かきくけこ</string>
<null name="repeat" />
<boolean name="autoboot" value="true" />
</map>
---------------------

取得値
-autoboot:設定値(true)
-repeat:初期値(あああ)
-offset:設定値(かきくけこ)


[復旧]
---------------------
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="offset">かきくけこ</string>
<string name="repeat">あいうえお</string>
<boolean name="autoboot" value="true" />
</map>
---------------------

取得値
-autoboot:設定値(true)
-repeat:設定値(あいうえお)
-offset:設定値(かきくけこ)


上記のように、破壊された設定値は読めなかった(まぁ当然ですね)が、ほかの値は正常に読めていました。
nullを設定した値に関しても、初期値で取得されます。

ということで、論理破壊が起こった場合は、その項目についてのみ設定がぶっとぶ(初期値に戻る)事がわかりました。
で、論理破壊が起こるとすると、コーディングミスがほとんどだと思います。
→コメントでももらいましたが、クリアされたインスタンス変数を設定しているなど。

これは、治せます。(というか、治します。)

論理破壊の判断基準としては、設定全消しではなくて、項目単位で消えるはずです。
もし、お手持ちのSwipeStarterで、だいたいこの項目とこの項目が消えるぜっ!ってのがあれば、ご連絡ください。
※すいませんが、プログラムを見直した感じだと、この落ち方をする個所はないように思えたので、場所の特定には至っていません。
 また、僕の端末でもこのような設定消去が起こったとこがないので、あたりも付けられず。。。。
 ごめんなさい。。

-備忘録-
putStringでnull設定しても、nullっていうノードができるのね。
イメージとしては<string name="xxx" />みたいになると思ってた。
ノード名=型名でした。
指摘もらってよかった。たくさん勉強になった。

0 件のコメント:

コメントを投稿