Я хочу загрузить изображение, используя метод NSURLConnectionDelegate и NSURLConnectionDataDelegate - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу загрузить изображения в метод connectionDidFinishLoading, и метод func connection (_connection: NSURLConnection, didReceive: Data) не вызывается

class ImageDownload: UIImageView,NSURLConnectionDelegate,NSURLConnectionDataDelegate
{
    var imageSaved:UIImage!
    var imageDownloaded:UIImage!
    var connection2:NSURLConnection = NSURLConnection()
    var data: NSMutableData = NSMutableData()
    var urlstring:String = ""
    var fileURL:URL!
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) as NSArray
    var pathPlist:String!

    func downloadImage()
    {
        let imgdownload :String =  "http://image.tmdb.org/t/p/w500" + urlstring
       // let urlnew: NSURL = NSURL(string: imgdownload)!
        //print(urlnew,"url")
        let url: NSURL = NSURL(string: imgdownload)!
         let request1: NSMutableURLRequest = NSMutableURLRequest(url: url as URL)
      //  let request2: NSMutableURLRequest = NSMutableURLRequest(url: urlnew as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60.0)
        connection2 = NSURLConnection(request: request1 as URLRequest, delegate: self, startImmediately: false)!
        connection2.start()
    }

    func setURL(url:String) -> Void
    {
        print(url,"url")
        urlstring = url
        let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        fileURL = documentsDirectory.appendingPathComponent(url)
        print(fileURL,"fileurl")

        if FileManager.default.fileExists(atPath: fileURL.path)
        {
            let image = UIImage(contentsOfFile: fileURL.path)
            print("file exists")
            self.image = image
        }
        else
        {
           downloadImage()
            //let imgdownload :String =  "http://image.tmdb.org/t/p/w500" + url
           // let request = URL(string: imgdownload)
           // let myUrl = NSURL(string: imgdownload)
            //print("image loaded")
           // self.image = self.imageSaved
        }
    }

        func connection(_ connection: NSURLConnection, didReceive response: URLResponse)
        {
            print("in didReceive response\n")
            self.data = NSMutableData()
        }
        func connection(_connection: NSURLConnection, didReceive: Data)
       {
        print("in didReceive data\n")

        self.data.append(data as Data)
        print(data,"image data is")
        }
    func connection(_ connection: NSURLConnection, didFailWithError error: Error)
    {
        print("connection error = \(error)")

    }
    func connectionDidFinishLoading(_ connection: NSURLConnection)
    {

    }
}*

1 Ответ

0 голосов
/ 13 февраля 2019

Я не знаком с синтаксисом Swift для NSURLConnection, поэтому есть ненулевой шанс, что я упускаю что-то неуловимое в именах методов делегата, но из головы в голову я вижу пару более серьезных проблем:

  • Почему вы используете NSURLConnection в Swift?Каждая версия iOS, которая поддерживает Swift, также имеет NSURLSession.Просто используйте общий сеанс, и ваше поведение будет практически идентично NSURLConnection.
  • Вы используете HTTP-URL.Во всех последних версиях iOS вы должны добавлять специальные биты в ваш Info.plist, если хотите, чтобы ваше приложение могло иметь доступ к HTTP-URL.Я не рекомендую делать это.Просто используйте HTTPS.

Вы можете получить бесплатные сертификаты TLS для HTTPS от Let's Encrypt.Я предполагаю, что как только вы настроите это и переключитесь на HTTPS URL, ваши проблемы исчезнут даже с существующим кодом.Но вы все равно должны использовать NSURLSession.

...