1

我在 GSettings 中有一个存储为 GVariant 类型a(ss)的数组,我想在 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-type 变量,并保持它们对齐,但是必须有一种方法可以正确地做到这一点,对吧?

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 回答