我们可以让一些进程等待变量初始化然后继续吗?
我有以下代码:
def viewDidLoad
BW::Location.get(distance_filter: 10, desired_accuracy: :best) do |result|
if result[:error].nil?
lat = result[:to].latitude
lng = result[:to].longitude
end
BW::HTTP.get("APIURL" |response|
case response.status_code
when 200
parsed_json = BW::JSON.parse(response.body)
if parsed_json[:tags]
App::Persistence['tag'] = parsed_json[:tags]
else
UIApplication.sharedApplication.delegate.logged_out
end
end
end
end
def imagePickerController(picker, didFinishPickingMediaWithInfo: info)
begin
App.alert('hello')
end while App::Persistence['tag'].nil?
end
App.alert("Finish")
end
拍摄照片时,我的App :: Persistence ['tag']可能尚未从API调用中收到值。因此,当用户单击“下一步”按钮时,我想让他们等待App :: Persistence ['tag']进行初始化,然后继续。
这似乎不起作用,它继续警告“完成”。
答案 0 :(得分:0)
一个简单的解决方案是将采摘后/摄像机业务逻辑放入其自己的方法中,然后当图像选择器/摄像机完成时,如果标签准备就绪,则调用该业务逻辑方法,如果它尚未就绪,则设置KVO听取标签改变可能,并存储来自选择器/摄像机的信息,然后一旦KVO拿起标签准备就绪,它将调用您的业务逻辑方法(或调用您的业务逻辑方法的方法)
attr_accessor :cameraInfo
def doTheThing
# your business logic, do something with self.cameraInfo
self.cameraInfo = nil
end
def imagePickerController(picker, didFinishPickingMediaWithInfo: info)
self.cameraInfo = info
if App::Persistence['tag'].nil?
# setup KVO or some basic loop in another thread or something along those lines
else
doTheThing
end
end