【问题标题】:How to do multiple serial connection using nsurlconnection?如何使用 nsurlconnection 进行多个串行连接?
【发布时间】:2014-08-24 06:27:52
【问题描述】:

我是 iPhone 开发的新手,所以我不知道这是简单还是复杂。 这是我的问题。我有一个应用程序,它首先连接到 Web 服务以进行身份​​验证过程。身份验证后,我需要获取登录用户的数据。那么,如何使用 NSURLConnection 连续两次连接到 Web 服务。串行意味着首先登录然后检索数据。就我而言,请求是以随机顺序发送的,这意味着有时它会先发送登录请求,有时会检索数据请求。 任何人都可以帮忙解决这个问题。 谢谢。

【问题讨论】:

    标签: objective-c iphone xcode nsurlconnection


    【解决方案1】:

    将你的 NSURLConnection 的委托设置为 self,并实现 NSURLConnectionDelegate 方法,有一个方法名为

    - (void) connectionDidFinishLoading:(NSURLConnection*)connection 
    

    它会告诉您请求何时成功完成,因此您可以在其中调用第二个请求。

    现在你唯一的问题是你不知道第二个调用哪个请求:) 因为你不知道哪个是第一个调用所以我通常做的只是简单地定义一些变量,简单地一个 int 或 NSString 作为一个标签,例如

    在@implemenetation 之前添加这些

    #define TAG_LOGIN_REQUEST 1
    #define TAG_DATA_REQUEST 2
    

    现在在类中定义它

    int currentTag
    

    现在在你开始登录请求之前添加这个

    currentTag = TAG_LOGIN_REQUEST;
    

    在你开始数据请求之前添加这个

    currentTag = TAG_DATA_REQUEST;
    

    每当调用此委托方法时

    - (void) connectionDidFinishLoading:(NSURLConnection*)connection 
    

    你只需检查一下

    if (tag == TAG_LOGIN_REQUEST) {
          // send data request
    }
    else if (tag == TAG_DATA_REQUEST) {
          // send login request
    }
    

    希望对你有帮助,如果有什么不清楚的地方,请告诉我。

    【讨论】:

      【解决方案2】:

      尝试同步您的通话。这是一个例子:

      1. 请求登录并等待登录响应

      2. 获取登录响应并调用 getData()

      3. 如果登录响应是,则请求数据。

      希望这会有所帮助.. :)

      编辑:

      维护两个全局标志(变量)。让 loginReq 和 dataReq 是那些标志。

      在调用 getLogin() 之前,让 loginReq = true;

      在您的connectinDidFinishLoading 支票中

      if(loginReq == true){
          loginReq = false;
          dataReq = true;
          getData();
      }
      else if(dataReq == true){
          dataReq = false;
      }
      

      【讨论】:

      • 更具体地说,我有一个方法 submitLogin(),然后调用两个方法 getLogin() 和 getData()。当我调用方法 getLogin() 然后 getData() 时,真正的问题出现了。但是只有一个 connectinDidFinishLoading() 方法。但是在这里,两个方法是按顺序执行的,但是这个 connectinDidFinishLoading() 方法是按顺序执行的,这不应该发生。就我而言,我需要先调用 getLogin() 方法,然后调用 connectionDidFinishLoading(),然后调用 getData(),然后再调用 connectionDidFinishLoadin。这该怎么做??请帮忙。
      • 应该没有问题。调用 getLogin() 等待响应,当您收到 getLogin() 响应时,调用 getData()。不要背靠背呼叫他们。可能是您的 getLogin() 在后台工作。
      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 2012-11-25
      • 2021-06-10
      • 2023-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多