c - 将数组存储在 Gvariant 中以用于 GSettings

标签 c glib variant

我正在尝试将数组存储在 GVariant 中,以便将其存储在 GSettings 中。

我正在使用 gtk+3 和 glib2 在 C 中编写应用程序。

通常是一个数组,每行包含两个元素,即服务器名称和设备名称。

所以我有以下代码:

void tux_gsettings_init() {
     tux_settings = g_settings_new("com.tuxin.TuxMusicStudio");
}

void tux_gsettings_save() {
GVariant *variant;
GVariantBuilder *builder;
builder = g_variant_builder_new(G_VARIANT_TYPE("a(ss)"));
g_variant_builder_add(builder, "a(ss)", "test1","test2");
g_variant_builder_add(builder, "a(ss)", "testa1","testa2");
variant = g_variant_new("a(ss)", builder);
g_variant_builder_unref(builder);
g_settings_set_value(tux_settings,"audio_devices_in",variant);
}

所以我要存储两行。

我收到以下错误:

(tuxmusicstudio:4355): GLib-CRITICAL **: g_variant_builder_end: assertion 'is_valid_builder (builder)' failed

(tuxmusicstudio:4355): GLib-CRITICAL **: g_variant_get_type: assertion 'value != NULL' failed

(tuxmusicstudio:4355): GLib-CRITICAL **: g_variant_type_is_array: assertion 'g_variant_type_check (type)' failed

(tuxmusicstudio:4355): GLib-CRITICAL **: g_variant_get_type_string: assertion 'value != NULL' failed

(tuxmusicstudio:4355): GLib-ERROR **: g_variant_new: expected array GVariantBuilder but the built value has type '(null)'

我在这里错过了什么?

最佳答案

g_variant_builder_add() 格式字符串应该描述您要添加的数据,而不是整个数组。所以这样的事情应该有效:

g_variant_builder_add (builder, "(ss)", "test1","test2");

关于c - 将数组存储在 Gvariant 中以用于 GSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22886023/

相关文章:

c - 我正在编写的 shell 在 execvp() 失败后无法正确退出

Java JNI 和 Vala - undefined symbol : g_once_init_enter

c - 如何将数据从 GHashTable 存储到 C 中的结构

c++ - 为什么在这里使用 int64_t 错误并编译 int?

c - 尽管文件已被另一个程序更改,但 fread 没有读取更新的值

c++ - 这些(bCondition == NULL)和(NULL==bCondition)有什么区别?

c - 给一个整型数组赋值会改变另一个整型数组

makefile - 如何在 Makefile 中配置 glib?

null - 如何检查变体是否为空?

C++:std::variant 可以容纳 vector 、 map 和其他容器吗?