2014-10-22 5 views
2

Перед обновлением до XCode6.1 я использовал метод NSData.dataWithContents(), и он отлично работал со всеми загрузками изображений. Сегодня я обновил до XCode 6.1 и это заставляет меня использовать функцию следующим образом:Swift: NSData (contentsOfURL) сбой на XCode 6.1

NSData(contentsOfURL: NSURL(string: completeUrl)!)! 

и при запуске приложения он выходит из строя на нем с сообщением:

fatal error: unexpectedly found nil while unwrapping an Optional value

Я пытался много вещей но ничего не работает. Я ищу любую простую альтернативу для загрузки изображений с данного URL.

ответ

7

Поскольку инициализационные из NSURL может потерпеть неудачу из-за нескольких причин, то лучше использовать его таким образом:

if let url = NSURL(string: completeUrl) { 
    if let data = NSData(contentsOfURL: url) { // may return nil, too 
     // do something with data 
    } 
} 
+0

Спасибо за ваш ответ, но я сделал это с лучшим способом, чем это. –

1

Более лучший способ для загрузки файлов является:

let request:NSURLRequest = NSURLRequest(URL: NSURL(string: completeUrl)!) 
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response:NSURLResponse!, imageData:NSData!, error:NSError!) -> Void in 
    var filePath:String = pathString + "/" + fileName 
    imageData.writeToFile(filePath, atomically: true) 
}) 

Это работает очень хорошо а также дает вам больше контроля над запросом.

+2

Обратите внимание, что 'NSURL (..)!' Может привести к краху вашего приложения, если URL-адрес не удался. – zisoft

+0

Благодарим за обмен информацией. –

+1

Если вы ищете лучший (простой в распространении и с «контролем» по запросу) способ загрузки файлов в ваше приложение, вам следует подумать об использовании NSOperation. Приятный пример в Swift: http://www.raywenderlich.com/76341/use-nsoperation-nsoperationqueue-swift –

Смежные вопросы