添加NSAllowsArbitraryLoads到plist仍然不起作用

时间:2015-12-03 16:53:18

标签: ios objective-c json nsurl

我在另一台创建JSON的计算机上有一个PHP文件,并希望从iOS应用程序中获取它。

我尝试使用IP地址从iOS应用程序连接到NSURL

NSURL *url = [NSURL URLWithString:@"http://192.168.xx.xxx/JSON/JSONtoIOS.php"];
NSData *data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];  

然后,我在info.plist文件中添加了以下代码:

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

但是,我仍然收到相同的错误消息:

  

传输安全性阻止了明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。

网址在网络浏览器上打开正常,但NSData返回nil时出现问题。

任何人都可以帮我解决这个问题吗?

编辑:在(void)viewDidLoad中使用NSURLSession

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:@"http://192.168.xx.xxx/JSON/JSONtoIOS.php"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", json);
}];
[dataTask resume];

3 个答案:

答案 0 :(得分:0)

首先,它应该是Info.plist。文件系统在iOS上区分大小写。只是为了挑选尼特 - 我怀疑这是你的问题。 : - )

其次,请确保将其添加到Info.plist中的正确位置。它必须处于最高级别。

第三,如果此应用包含任何应用扩展,框架或任何可能包含Info.plist文件的内容,请确保您正在编辑正确的Info.plist文件。

第四,确保您之后重建了应用程序,并确保您正在运行重建的副本。

第五,如果这没有帮助,请启用CFNetwork诊断日志记录,如QA1887中所述。

答案 1 :(得分:0)

试试这个,

NSData *postData = [someStringToPost dataUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:someURLString];

我认为这就是问题所在。

希望这有帮助。

答案 2 :(得分:0)

问题在于这一行:

NSData *data = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];

那不是你怎么做网络的!它是dataWithContentsOfURL(它打开本地文件网址)的误用,加上它是同步的,所以即使你在网络上,你也会做坏事。

使用NSURLSession通过数据任务检索数据。现在,您的NSAppTransportSecurity设置将得到遵守(此外,您将更好地了解网络进展时的情况)。