菜鸟教程小白 发表于 2022-12-13 03:51:26

ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作


                                            <p><p>我关注了这个截屏视频... <a href="http://nsscreencast.com/episodes/6-afnetworking" rel="noreferrer noopener nofollow">http://nsscreencast.com/episodes/6-afnetworking</a> </p>

<p>我的单例 <code>AFHTTPClient</code> 代码是...</p>

<pre><code>+ (MyClient *)sharedInstance
{
    static dispatch_once_t once;
    static MyClient *myClient;
    dispatch_once(&amp;once, ^ { myClient = [ initWithBaseURL:];});
    return myClient;
}

- (id)initWithBaseURL:(NSURL *)url
{
    self = ;
    if (self) {
      // these are not actual values but I am setting default headers.
      ;
      ;
      ;
      ;
      ;
      ;

      ];
    }
    return self;
}
</code></pre>

<p>然后我像...一样执行它</p>

<pre><code>[ getPath:@&#34;blah.php&#34; parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSMutableArray *stats = ;

      // it crashes on the next line because responseObject is NSData
      for (NSDictionary *dictionary in responseObject) {
            CCStatistic *stat = [ initWithDictionary:dictionary];

            ;
      }

      self.stats = stats;
      ;
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@&#34;Error retrieving!&#34;);
      NSLog(@&#34;%@&#34;, error);
    }];
</code></pre>

<p>一切正常。我已经用 Charles 拦截了它,它正在发送正确的请求并接收正确的 JSON,但该操作不是 JSON 操作。</p>

<p>所以 <code>responseObject</code> 是 <code>NSData</code> 而不是我期望的 <code>JSON 对象</code>。</p>

<p>我错过了使用 JSON 操作的任何配置吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在您的情况下,决定请求是否可由 JSON 操作处理的代码行如下:</p>

<pre><code>return [ intersectsSet:AFContentTypesFromHTTPHeader()];
</code></pre>

<p>如解释 <a href="https://stackoverflow.com/a/9163845/846273" rel="noreferrer noopener nofollow">here</a>通过 Mattt Thompson(<code>AFNetworking</code> 的作者),您必须将请求的 <code>Accept</code>header 设置为 <code>application/json</code>。</p>

<p>这并不直观,并且高度依赖于实现,但它确实有效。</p>

<p>添加</p>

<pre><code>;
</code></pre>

<p>到你的客户端初始化,应该没问题,不管路径扩展。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18470748/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18470748/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - AFNetworking AFHTTPClient AFJSONRequestOperation 不使用 JSON 操作