菜鸟教程小白 发表于 2022-12-12 15:04:01

ios - AFHTTPSessionManager 委托(delegate)问题


                                            <p><p>这是我的问题:
我有一个 <code>AFHTTPSessionManager</code> 文件,它也是一个单例,并管理我对服务器的所有 API 请求。一旦我通过 <code>responseObject</code> 从服务器获得了答案,我将其传递回 <code>UIViewController</code>,后者使用委托(delegate)请求它。</p>

<p>我的问题是:由于我的经理是单例,如果另一个 API 请求同时由另一个 <code>UIViewController</code> 发出,则委托(delegate)设置为这个 Controller ,当我第一次请求 <code>responseObject收到了 </code> 我不能再把它传回第一个 <code>UIViewController</code> 了。</p>

<p>我希望它很容易理解。</p>

<p>解决这个问题的正确方法是什么?</p>

<p>这是我的 <code>AFHTTPSessionManager</code> 类中的方法的样子:</p>

<pre><code>- (void)getStaffForCompany:(int)companyID
{
    if ([ objectForKey:@&#34;currentUser&#34;])
    {
      NSMutableDictionary *parameters = ;
      parameters[@&#34;apiKey&#34;] = agendizeApiKey;
      parameters[@&#34;token&#34;] = [ currentApplicationUser].token;

       parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
            if () {
                ;
            }
      } failure:^(NSURLSessionDataTask *task, NSError *error) {
            if () {
                ;
            }
      }];
    }
}
</code></pre>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以定义自己的完成 block 并将您的 responseObject 传回 Controller ,这是一个示例 <code>CustomCompletion</code>。</p>

<p>将其添加到 <code>AFHTTPSessionManager.h</code> 的 <code>@implementation</code> 行上方。</p>

<pre><code>typedef void(^CustomCompletion)(id responseObject);
</code></pre>

<p>更新您的方法以包含 <code>CustomCompletion</code> 对象。</p>

<pre><code>- (void)getStaffForCompany:(int)companyID withCompletion:(CustomCompletion)completion {
    // On success pass the responseObject back like so.
    completion(responseObject);
}
</code></pre>

<p>然后<code>所有魔法发生的地方</code>,回到你的 Controller 中,在你的单例上调用这个方法并处理完成。</p>

<pre><code>[SingletonManager getStaffForCompany:1 withCompletion:^(id responseObject) {
    if (responseObject) {
      // do something with this object
    }
}];
</code></pre>

<p>我还没有测试过这段代码,但我在 <code>Swift</code> 中做了一些非常相似的事情,而且效果很好。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - AFHTTPSessionManager 委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29634630/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29634630/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - AFHTTPSessionManager 委托(delegate)问题