1

GSettingsにタイプのGVariantとして格納されている配列があり、a(ss)これをCinnamonアプレットで使用します。次のコードを使用して、値を正常に取得できます。

let schema = schema_source.lookup(SCHEMA_NAME, false);
let settings = new Gio.Settings({ settings_schema: schema });
let my_value = settings.get_value('myvalue');

しかし、私はそれを開梱することはできません。私が見る限り、おそらくGVariantIter構造体を使用して解凍する必要がありますが、ドキュメントが限られており、gjs APIで正しいインターフェイスを見つけることができません(実際に存在する場合)。誰かがそれを行う方法を知っていますか?

ありがとう!

編集: 私のスキーマは次のようになります:

<key type="a(ss)" name="myvalue">
    <default>[]</default>
    <summary>an array of (string, string) tuples</summary>
    <description></description>
</key>

とりあえず、JSON設定を保存するために外部ファイルを使用していますが、100%満足のいく解決策ではありません。2つのas型変数を維持し、それらを整列させておくことができると思いますが、これを適切に行う方法が必要ですよね?

4

2 に答える 2

3

少し遅れますが、my_value.unpack()完全に正常に動作します。

my_value.deep_unpack()配列とその要素を再帰的に解凍します。

于 2013-08-11T12:23:37.313 に答える
0

あなたのタイプの設定から、文字列の配列を保存/取得したいと思いますか?この場合、以下を使用するより簡単な方法がありGio.Settings.get_strv(String key)ます。

// Read the array (will create a real JS array):
let string_array = settings.get_strv("myvalue");
// Now do something with it...
// Store it:
settings.set_strv("myvalue", string_array);
Gio.Settings.sync(); // Important!

次に、スキーマに次のようなエントリを含めます。

<key name="myvalue" type="as">
  <default>[]</default>
  <summary>Some array.</summary>
  <description>An Array of strings.</description>
</key>

私は自分の拡張機能で同じ手法を使用していますスキーマ

于 2012-12-15T15:29:44.697 に答える