如何在Ruby Motion中同步调用HTTP API

时间:2014-05-31 08:57:59

标签: ruby json rubymotion

在我的控制器中,我想等待/阻止,直到http请求在尝试加载表之前返回数据。目前,在设置数据源后获取@data.count时会抛出错误:

 def viewDidLoad
  super
  self.title = "my categories"
  @table = UITableView.alloc.initWithFrame(self.view.bounds)


  @data = nil

  //how to call this next line synchronously ?
  create_data


  @table.dataSource = self
  self.view.addSubview @table
 end

 def create_data
     BW::HTTP.get("http://website.com/api/v1/category") do |response|
     if response.ok?
    p "response was ok"
    mydata = BW::JSON.parse(response.body.to_str)
    mydata.each {           
        |item|
         @data << Item.new(item)
         p "test"
    }
    else
       warn "problem"
    end
  end
end

我该怎么做?

1 个答案:

答案 0 :(得分:0)

你不应该等。

您可能只需将@data初始化为空数组即可启动。这将避免异常并防止需要阻止UI线程,您应该不惜一切代价避免这种情况。

所以替换

@data = nil

@data = []