0

我们可以让一些进程等待一个变量被初始化然后继续吗?

我有以下代码:

  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'] 在继续之前进行初始化。

这似乎不起作用,它继续提醒“完成”。

4

1 回答 1

0

一个简单的解决方案是将post-picker/camera业务逻辑放入它自己的方法中,然后当image picker/camera完成时,如果标签准备好,调用该业务逻辑方法,如果还没有准备好,设置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
于 2013-12-12T01:39:00.013 回答