xojo 用按钮调用一个方法

xojo call a method with button

我在 View 方法中有下面的代码来解析 JSON 文件。方法 ContentsOfDictionary 接受参数 d 作为 Xojo.Core.Dictionarylevel 作为整数,以及 returns 文本。
如果我使用 ContentsOfDictionary 在操作按钮中,我收到此错误:

error: Not Enough arguments: got 0, expected at least 1

Here is a link to the test file I am using.
如何调用方法 ContentsOfDictionary

 dim dict as Xojo.Core.Dictionary = Xojo.Data.ParseJSON (kJsonData)
   const kEOL = &u0A

  dim indent as text
  for i as integer = 1 to level
    indent = indent + " "
  next
  dim t as text
  for each entry as Xojo.Core.DictionaryEntry in dict
    t = t + indent + entry.Key + " "
    if Xojo.Introspection.GetType( entry.Value ) is nil then
      t = t + "nil" + kEOL
    else
      select case Xojo.Introspection.GetType( entry.Value ).Name
      case "Boolean"
        t = t + if( entry.Value, "true", "false" ) + kEOL
      case "Text"
        t = t + entry.Value + kEOL
      case "Int32", "Int64"
        //
        // You get the idea
        //
      case "Dictionary"
        t = t  + kEOL + ContentsOfDictionary( entry.Value, level + 1 )
      end select
    end if
  next
  return t

更新:下面的 None 适用于@johnnyB 的示例是 ContentsOfDictionary 函数,不应该尝试访问 JSON 数据,而只是处理提供的数据Dictionary。下面评论里有固定测试项目link


失败是因为您不满足 ContentsOfDictionary 任何签名的参数类型。

entry.ValueAuto 类型,因此在调用 ContentsOfDictionary 之前,您需要将 entry.Value 复制到 Dictionary 并将其传递给函数相反。

例如...

    ...
    case "Dictionary"
        dim d as new Xojo.Core.Dictionary = entry.Value
        t = t  + kEOL + ContentsOfDictionary( d, level + 1 )
end select