我有超级简单的代码,可以从网上下载图片。它在iOS 8中运行良好,但现在我在iOS 9的Xcode 7.3中不断出现此错误。这是一个错误吗?
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
NSString* documentsPath = [paths objectAtIndex:0];
NSError *error;
NSString *data2URL = @"http://cdn.minecraftpocket-servers.com/images/flags/Brazil.png";
NSURL *url = [NSURL URLWithString:data2URL];
NSString *imgFileNameStr = [data2URL lastPathComponent];
NSData *data2 = [NSData dataWithContentsOfURL:url options: NSDataReadingUncached error: &error];
if (error)
NSLog(@"Download error: %@",error);
//check
if (data2 == NULL)
{
NSLog(@"DATA IS NULL");
}
else
{
NSLog(@"DATA IS NOT NULL");
}
//saving file
NSString* fullPathToFile2 = [documentsPath stringByAppendingPathComponent:imgFileNameStr];
BOOL success = [data2 writeToFile:fullPathToFile2 atomically:NO];
NSLog(@"Success = %d ...", success);
ERROR:
2016-07-03 23:00:36.963 014-test-proj[15404:419151] Download error: Error Domain=NSCocoaErrorDomain Code=256 "The file “Brazil.png” couldn’t be opened." UserInfo={NSURL=http://cdn.minecraftpocket-servers.com/images/flags/Brazil.png}
2016-07-03 23:00:36.963 014-test-proj[15404:419151] DATA IS NULL
2016-07-03 23:00:36.964 014-test-proj[15404:419151] Success = 0 ...
我已经检查过&确保我的plist文件具有应用程序安全性。
有人遇到同样的问题HERE。我错过了什么?
更新 如果我使用此链接,代码可以工作...
NSString *data2URL =@"https://upload.wikimedia.org/wikipedia/commons/1/1e/Large_Siamese_cat_tosses_a_mouse.jpg";
我不明白。为什么它与另一个有问题。
答案 0 :(得分:1)
您永远不应该调用[NSData dataWithContentsOfURL:url]
从远程URL(即Internet上的某个位置)下载数据。你的代码很邋and,你正在做同步网络,这总是错误的。现在你被运行时停止了,这是正确的。要下载数据,下载。使用NSURLSession。这就是它的用途。
答案 1 :(得分:-1)
不同之处在于使用安全URL的更改。 Apple已经引入了应用程序传输安全性(ATS),现在您的应用程序plist中有一个设置,您必须启用该设置才能从非如此形式的URL加载。
将以下内容添加到Info.plist中以禁用ATS
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>