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

时间:2015-09-22 05:13:45

标签: ios objective-c xcode afnetworking afnetworking-2

在使用Xcode 7(GM)以及Xcode 7.1(beta 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!之后将调用两个块中的一个。但是,任何人都没有被执行过。

然而,奇怪的是,如果我打电话给以下一行:

[op cancel];

我输出了预期的failure块的日志。我没有尝试过任何其他事情(在我的计算机上关闭互联网连接,创建一个无意义的URL等)已经能够执行failure块。

此时我不确定我是否一直试图将这个调试到深夜,如果这是Xcode 7.x的错误,或者我在某个地方犯了错误。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

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

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

第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
    }
}]; 

希望这里的某些东西可以帮助将来的某个人。这是一个完美的噩梦,需要好好的一天半才能搞清楚!