gpt4 book ai didi

ruby - Bubblewrap HTTP -> TableView ;方法返回 bubblewrap 查询而不是响应数据

转载 作者:数据小太阳 更新时间:2023-10-29 08:01:05 25 4
gpt4 key购买 nike

我正在试用 Rubymotion,但似乎无法弄清楚如何完成看似简单的任务。

我已经为人员目录设置了一个 UITableView。我创建了一个返回 json 的 Rails 后端。

Person 模型定义了一个 get_people 类方法:

def self.get_people
BubbleWrap::HTTP.get("http://myapp.com/api.json") do |response|
@people = BW::JSON.parse(response.body.to_str)
# p @people prints [{"id"=>10, "name"=>"Sam"}, {etc}] to the console
end
end

在 directory_controller 中,我只想将 @data 的实例变量设置为端点返回的数组,以便我可以填充 TableView 。

我正在尝试在 viewDidLoad 中执行 @data = Person.get_people,但收到一条错误消息,指示正在传递 BW 响应对象:未定义的方法 #BubbleWrap::HTTP::Query:0x8d04650 ...> (NoMethodError)`

因此,如果我在 BW 响应 block 之后将我的数组硬编码到 get_people 方法中,一切正常。但是我发现我也无法通过 BW 响应 block 的关闭来持久化实例变量。

def self.get_people
BubbleWrap::HTTP.get("http://myapp.com/api.json") do |response|
@people = BW::JSON.parse(response.body.to_str)
end
p @people #prints nil to the console
# hard coding [{"id"=>10, "name"=>"Sam"}, {etc}] here puts my data in the table view correctly
end

我在这里错过了什么?我如何从 bubblewrap 的响应对象中获取这些数据并以可用的形式传递给我的 Controller ?

最佳答案

正如 BW 文档“BW::HTTP 包装 NSURLRequest、NSURLConnection 和 friend ,为 Ruby 开发人员提供更熟悉和更易于使用的 API 中所解释的那样。API 使用异步调用和 block 来保持尽可能简单。”

由于调用的异步性质,在您的第二个片段中,您在实际更新它之前打印了@people。正确的方法是在解析结束后将新数据传递给 UI(例如 @table.reloadData() 如果 @people 数组应该显示在 UITableView 中)。

这是一个例子:

def get_people
BubbleWrap::HTTP.get("http://myapp.com/api.json") do |response|
@people = BW::JSON.parse(response.body.to_str)
update_result()
end
end

def update_result()
p @people
# do stuff with the updated content in @people
end

RubyMotion async programming with BubbleWrap 找到一个更复杂的用例和更详尽的解释

关于ruby - Bubblewrap HTTP -> TableView ;方法返回 bubblewrap 查询而不是响应数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com