2015-09-15 2 views
1

Я использую рамки: UIImageView + AFNetworking - Код здесь: http://pastebin.com/cyzSaxshsetImageWithUrl от Parse.com к UICollectionView

Это, как я запрос от Parse.com:

func queryFromParse(){ 
     var query = PFQuery(className: "currentUploads") 
     query.orderByDescending("createdAt") 
     query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in 
      if error == nil 
      { 
       if let newObjects = objects as? [PFObject] { 

        for oneobject in newObjects { 
         let text = oneobject["imageText"] as! String 
         let username = oneobject["username"] as! String 
         let time = oneobject.createdAt! 

         if let userImage = oneobject["imageFile"] as? PFFile { 
          let userImage = oneobject["imageFile"] as! PFFile 

          let imageURL = userImage.url // <- Bruker nå userImage.URL, henter ikke bildefilen med en gang 

          var OneBigObject = Details(username: username, text: text, CreatedAt: time, image: imageURL!) 

          self.arrayOfDetails.append(OneBigObject) 

          dispatch_async(dispatch_get_main_queue()) { self.collectionView.reloadData() } 
         } 
        } 
       } 
      } 
     } 
    } 

А это мой " cellForItemAtIndexPath ":

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell 

     cell.layer.borderWidth = 0.5 
     cell.layer.cornerRadius = 3 
     var myColor : UIColor = UIColor(red: 0.0, green: 0.0, blue:0.0, alpha: 0.15) 
     cell.layer.borderColor = myColor.CGColor 

     var post = self.arrayOfDetails[indexPath.row] 
     cell.currentUserLabel.text = post.username 
     cell.imageText.text = post.text 

     cell.uploadedTimeLabel.text = post.CreatedAt.timeAgo 

     dispatch_async(dispatch_get_main_queue()) { cell.ImageView.setImageWithUrl(NSURL(string: post.image)!, placeHolderImage: UIImage(named: "Placeholder")) } 

     return cell 
    } 

У меня возникли проблемы. Изображения занимают 10-20 секунд для загрузки, и у меня есть только 10 изображений в Parse. Вот как это выглядит через 5 секунд: enter image description here

Любые предложения здесь?

ответ

0

Заменить этот код:

dispatch_async(dispatch_get_main_queue()) { self.collectionView.reloadData() } 
    } 

С этим кодом в методе cellForRowAtIndexPath:

let request: NSURLRequest = NSURLRequest(URL: imgURL) 
let mainQueue = NSOperationQueue.mainQueue() 
NSURLConnection.sendAsynchronousRequest(request, queue: mainQueue, completionHandler: { (response, data, error) -> Void in 
    if error == nil { 
     let image = UIImage(data: data) 
     // Update the cell 
     dispatch_async(dispatch_get_main_queue(), { 
      if let cellToUpdate = tableView.cellForRowAtIndexPath(indexPath) { 
       cellToUpdate.imageView?.image = image 
        } 
       }) 
      } 
      else { 
       println("Error: \(error.localizedDescription)") 
       } 
      }) 
+0

Обновлено моего ответа. Также рассмотрите кеширование ваших изображений после повторного использования ваших ячеек, этот код пытается загрузить изображение снова. Возможно, вы захотите использовать [AlamofireImage] (https://github.com/Alamofire/AlamofireImage) – ridvankucuk

+0

Что я могу вставить «request request: NSURLRequest = NSURLRequest (URL: imgURL)» «imgURL»? –

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