繁体   English   中英

AFNetworking 2.0请求挂在iOS 9 / WatchOS 2的Today Extension and Watch应用程序中

[英]AFNetworking 2.0 requests hanging in Today Extension and Watch app in iOS 9 / WatchOS 2

使用Xcode 7(GM)和Xcode 7.1(测试版1)构建WatchKit和Today扩展时,遇到了一个非常奇怪且令人沮丧的问题。 使用AFNetworking 2.0(截至本文发布时为最新),我从任何这些扩展中调用以下代码:

AFHTTPRequestOperation *op = [manager GET:endpoint parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"Response: %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"ERROR: %@", error);
}];
NSLog(@"Called!");

期望这里是在Called!之后Called!两个块之一Called! 被记录。 但是,都没有人执行过。

但是,奇怪的是,如果我调用以下行:

[op cancel];

我得到了预期的failure块的日志输出。 我没有尝试过的其他任何事情(关闭计算机上的Internet连接,创建废话URL等)都无法使failure块执行。

在这一点上,我不确定我是否一直在尝试调试到深夜,是否是Xcode 7.x的错误,还是在某个地方出错。 任何帮助表示赞赏!

看来这个问题源于几件不同的事情。

问题的根源是iOS 9的新App Transport Security规则。 可以使用应用程序的info.plist文件中的某些键覆盖这些规则。 但是,我很难在扩展中使用Xcode 7.0(GM)来使覆盖键正确保存,因为在尝试运行项目时会抛出错误

步骤1 :在Xcode 7.1 beta 1中,Xcode实际上支持上述密钥(甚至自动完成),因此我能够将这些密钥添加到WatchKit和今天的扩展info.plist文件中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict> 

步骤2 :此时,AFNetworking仍处于挂起状态,并且不允许连接通过。 即使现在我也不确定为什么会这样。 相反,我使用标准的iOS类进行网络调用,最终最终解决了我的问题,并能够照常运行请求:

NSMutableURLRequest *connection = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://myurl.com/xyz"]];
[connection setValue:"Bearer myAuthorization" forHTTPHeaderField:@"Authorization"];
[NSURLConnection sendAsynchronousRequest:connection queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    if (error == nil) {

        NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        //Do stuff with data

    } else {

        //Error handling
    }
}]; 

希望这里有帮助将来的人。 这真是一场完整的噩梦,好了一天半才弄清楚!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM