Swift: сбой NSData (contentsOfURL) в XCode 6.1

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

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

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

фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения

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


person Aleem Ahmad    schedule 22.10.2014    source источник


Ответы (2)


Поскольку инициализация NSURL может завершиться неудачно по нескольким причинам, вам лучше использовать ее следующим образом:

if let url = NSURL(string: completeUrl) {
    if let data = NSData(contentsOfURL: url) { // may return nil, too
        // do something with data
    }
}
person zisoft    schedule 22.10.2014
comment
Спасибо за ваш ответ, но я сделал это лучше, чем этот. - person Aleem Ahmad; 22.10.2014

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

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)
})

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

person Aleem Ahmad    schedule 22.10.2014
comment
Обратите внимание, что NSURL(..)! может привести к сбою вашего приложения, если URL-адрес не работает. - person zisoft; 22.10.2014
comment
Спасибо, что поделились информацию. - person Aleem Ahmad; 22.10.2014
comment
Если вы ищете лучший (легко расширяемый и с «управлением» по запросу) способ загрузки файлов в ваше приложение, вам следует рассмотреть возможность использования NSOperation. Хороший пример на Swift здесь: raywenderlich.com/76341/use-nsoperation-nsoperationqueue -быстро - person Maciej Kozieł; 22.10.2014