2015-08-20 7 views
2

Я пытаюсь преобразовать приложение watchOS 1 к watchOS 2. Но я увидел ошибку при попытке загрузить изображение из URL с этим кодом:Невозможно загрузить HTTP URL изображения

let url:NSURL = NSURL(string: "http://www.xxxxxxxx.com/xxx/xyz.jpg")! 
let data:NSData = try! NSData(contentsOfURL:url, options:[]) 
imageone.setImage(UIImage(data: data)) 

ошибка:

Ошибка домена = NSCocoaErrorDomain Code = 256 «Файл« xyz.jpg »не может быть открыт». UserInfo = {NSURL = http://www.xxxxxxxx.com/xxx/xyz.jpg}

Я прочитал в Интернете, что это связано с новым протоколом безопасности при транспортировке приложений. Я также прочитал поставить

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 

в info.plist о продлении Watchkit но появляется та же ошибка. Это то же самое, если я использую изображение в домене HTTPS.

ПРИМЕЧАНИЕ: На тренажере он отлично работает!

Я использую XCode 7 бета 5.

Кто-нибудь знает, как решить эту проблему?

UPDATE Осматривая сети я обнаружил, что, может быть, с NSURLSession я буду решать эту проблему, но я не нашел ничего полезного по этому вопросу. Может ли кто-нибудь помочь мне преобразовать мой код в синтаксис NSURLSession? Спасибо!

+0

Уверены ли вы, что изображение существует? Я чувствую, что это проблема с URL-адресом конкретно ... – Idris

+0

@Idris Да, я пробовал с различными изображениями по HTTP или HTTPS, а в браузере Mac работает, а также на моем проекте, выполненном в симуляторе, он работает – Gualty

+0

Я просто столкнулся с этим , убедитесь, что NSAllowsArbitraryLoads как в info.plist (приложение и расширение Watchki ...) и чистый проект –

ответ

-1

Я решил создать функцию:

func imageRequest(urlweb:NSURL) { 

    let requestURL: NSURL = urlweb 
    let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
    let session = NSURLSession.sharedSession() 
    let task = session.dataTaskWithRequest(urlRequest) { 
     (data, response, error) -> Void in 

     if error == nil { 

      NSLog("Success!") 
      self.imagename?.setImage(UIImage(data:data!)) 

     } else { 

      NSLog("Fail") 

     } 

    } 

    task.resume() 

} 
0

Это простой способ достижения, что с NSSession в Objective-C. Перевод его в Swift не должен быть сложным

NSString *dataUrl = @"http://www.xxxxxxxx.com/xxx/xyz.jpg"; 
NSURL *url = [NSURL URLWithString:dataUrl]; 

NSURLSessionDataTask *downloadTask = [[NSURLSession sharedSession] 
dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
UIImage *downloadedImage = [UIImage initWithData:data]; 
    // Do what you like with your image 
}]; 

[downloadTask resume]; 
Смежные вопросы