Bug Xcode 7.3 with iOS 9.2 dataWithContentsOfURL

时间:2016-07-04 03:05:02

标签: ios objective-c xcode

我有超级简单的代码,可以从网上下载图片。它在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文件具有应用程序安全性。

enter image description here

有人遇到同样的问题HERE。我错过了什么?

更新 如果我使用此链接,代码可以工作...

NSString *data2URL =@"https://upload.wikimedia.org/wikipedia/commons/1/1e/Large_Siamese_cat_tosses_a_mouse.jpg";

我不明白。为什么它与另一个有问题。

2 个答案:

答案 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>