我有一个数组存储为GSettings中a(ss)
类型的GVariant,我想在Cinnamon Applet中使用它。我可以使用以下代码成功检索值:
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%令人满意的解决方案。我想我可以维护两个as
类型的变量,并保持它们对齐,但必须有一种方法可以正确地做到这一点,对吗?
答案 0 :(得分:2)
有点晚了,但my_value.unpack()
绝对正常。
my_value.deep_unpack()
将递归解包数组及其元素。
答案 1 :(得分: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>
我在扩展程序中使用相同的技术:Read/Write | Schema