无法在Gjs中创建GArray

时间:2013-02-17 10:33:36

标签: gnome gnome-shell gjs gnome-keyring-daemon

我尝试创建一个GArray,但我总是犯同样的错误:

  

const GLib = imports.gi.GLib;

     

var garray = new GLib.Array(true,true,1); //无法构建   盒装类型数组,因为它没有零参数,只能   包装现有的

     

var garray = new GLib.Array(); //无法构造盒装类型数组   因为它没有零参数,所以只能包装一个现有的

我需要一个GArray才能在GnomeKeyring.item_create_sync方法中使用它:

  

GnomeKeyring.item_create_sync(       “登录”,       4,       “名称”,       新的GLib.Array(真,真,1)       “通过”,       真);

我尝试了其他类型的数组而不是GArray,这里是错误

  • [] - >对象0xb5d120d0不是(null)的子类,它是一个数组
  • new Array() - >对象0xb5e12138不是(null)的子类,它是一个数组
  • {} - >对象0xb5d0b1b0不是(null)的子类,它是一个Object
  • 5 - >未处理的GType GArray从Number
  • 解压缩GArgument
  • "5" - >参数“属性”的预期类型接口,但类型为“字符串”

如果有人有GArrayGnomeKeyring.item_create_sync

的解决方案

2 个答案:

答案 0 :(得分:0)

阅读/usr/share/gir-1.0/GnomeKeyring-1.0.gir并搜索function name="item_create_sync"。你有所有必需的参数,在我看来你需要一个简单的列表。 GnomeObjectIntrospection会在需要时将其转换为GArray。

答案 1 :(得分:0)

在可能和需要的情况下,GNOME Shell的回溯将根据自己的意愿在JS和GNOME类型之间进行转换。如果您在JS空间中创建一个数组并将其传递给需要GArray的函数,那么如果您将该数组作为参数传递,则Shell会进行转换。

唯一不被转换的对象是其类在一个空间中存在的对象,而不是在另一个空间中存在的对象。像GNOME文件对象一样,因为JS没有本机文件处理程序。 您可以在文件流上使用.toString()方法以字符串形式获取其内容,或调用read方法以二进制形式获取二进制值。