我在另一台创建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];
答案 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设置将得到遵守(此外,您将更好地了解网络进展时的情况)。