我有一个RSS阅读器应用程序,它有一个解析器。它运行良好,直到iOS 9测试版。每当我尝试加载数据时,都会收到错误代码1022.这是我建立连接的代码:
- (void)parseRssFeed:(NSString *)url withDelegate:(id)aDelegate {
[self setDelegate:aDelegate];
responseData = [NSMutableData data];
NSURL *baseURL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
错误处理程序:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSString * errorString = [NSString stringWithFormat:@"Unable to download XML data (Error code %i )", [error code]];
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
}
我不确定iOS 8和9之间的变化,但由于某种原因,该应用程序不再有效。任何帮助将不胜感激!
答案 0 :(得分:16)
因此,问题与ATS(App Transport Security)有关,这是iOS 9中的一项新功能,可在连接之前检查URL的真实性。由于我不关心我正在连接的网站的安全性,我完全禁用了ATS。这可以通过将以下代码添加到应用程序的info.plist文件来完成:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
答案 1 :(得分:2)
for swift4在app的info.plist
中添加此内容<key>App Transport Security Settings</key>
<dict>
<key>Allow Arbitrary Loads</key>
<true/>
</dict>
或
转到app的info.plist
右键单击并选择&#34;添加行&#34; 并找到&#34;应用传输安全设置&#34;然后单击它。 然后再次右键单击&#34;应用程序传输安全设置&#34;并选择&#34;添加行&#34; 然后找到并点击&#34;允许任意负载&#34;并将其值修改为true。
答案 2 :(得分:0)
我在接受的答案中添加了建议,但仍然没有用。在我的情况下,我不得不将http
更改为https
,并且仍然有效(即使我没有使用安全的网址)。
答案 3 :(得分:-1)
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString *stringUrl = [NSString stringWithFormat:@"http://rest-service.guides.spring.io/greeting"];
NSString *webStringURL=[stringUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:webStringURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError)
{
if (data.length > 0 && connectionError == nil)
{
NSDictionary *dicYourResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSLog(@"ID: %@", [dicYourResponse objectForKey:@"id"]);
NSLog(@"Content:%@", [dicYourResponse objectForKey:@"content"]);
}
}];
}
我这样做是为了点击url,它的构建成功但在控制台中没有答案。我在info.plist中添加了App transport security和exception Domain,但它对我不起作用。