2017-01-11 4 views
1

Это мой код:Как использовать NSData, чтобы получить фотографии в Swift

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "news", for: indexPath) 
    let lebel = cell.viewWithTag(1) as! UILabel 
    let lebel1 = cell.viewWithTag(2) as! UILabel 
    lebel.text = self.titlename[indexPath.row] 
    lebel1.text = self.content[indexPath.row] 
    var image: UIImage? 
    if let imageURL = URL(string:self.picture[indexPath.row]) { 
     do { 
     let imageData = try Data(contentsOf:imageURL as URL) 
      image = UIImage(data:imageData as Data) 
     } catch { 
      print("error") 
     } 
    } 
    if image != nil { 
     cell.imageView?.image = image 
    }else{ 
     cell.imageView?.image = nil 
     //cell.imageView?.image = UIImage(named: "failed") 
    } 
    return cell 
} 

self.picture является String массив. Когда я делаю сетевой запрос, URL, к которому я хочу подключиться, - https://localhost:8443/news/p0.jpg. Я получаю эту ошибку:

2017-01-11 10: 11: 28.888 про [19800: 2397129] NSURLSession/NSURLConnection HTTP загрузка не удалась (kCFStreamErrorDomainSSL, -9813) ошибка

Но я был использование Alamofire для подключения к https в других местах было очень успешным. Что с этим не так?

ОК, я пытаюсь использовать URL и Data, но это не имеет ничего общего с ошибкой

+2

Вы используете Swift. Не используйте 'NSData' или' NSURL'. Используйте «Данные» и «URL». – rmaddy

+0

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

+0

Вы подключены к "localhost". Это то, на каком устройстве вы работаете в приложении (ваш Mac, если это симулятор или любое другое устройство iOS, если оно тестируется на реальном устройстве). Предполагая, что вы используете симулятор, ваш Mac имеет действительный сертификат SSL для веб-сервера, работающего на порту 8443? – rmaddy

ответ

0

ОК, как это делается! потому что я использую Alamofire для управления соединением, поэтому я должен использовать alamofire для получения данных изображения. Вместо оригинального метода!

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "news", for: indexPath) 
    let lebel = cell.viewWithTag(1) as! UILabel 
    let lebel1 = cell.viewWithTag(2) as! UILabel 
    let pict = cell.viewWithTag(3) as! UIImageView 
    lebel.text = self.titlename[indexPath.row] 
    lebel1.text = self.content[indexPath.row] 
    if let imageURL = URL(string:self.picture[indexPath.row]) { 
     Alamofire.request(imageURL, method: .get).responseData { response in 
      guard let data = response.result.value else { 
       pict.image = nil 
       //cell.imageView?.image = UIImage(named: "failed") 
       return 
      } 
      pict.image = UIImage(data: data) 
     } 
    } 
    return cell 
} 

Но так спасибо!