2015-07-11 67 views
0

我想從PFFile中檢索包含多個圖像的圖像,並將它們放在一個滾動視圖中。到目前爲止,我已經嘗試了以下操作,但是這會返回一個錯誤「警告:正在主線程上執行長時間運行的操作。」從swift中在uiscrollview中加載圖像

let scrView = UIScrollView() 

    var query = PFQuery(className: "Pictures") 
    query.whereKey("uploader", equalTo: PFUser.currentUser()!) 
    query.orderByDescending("createdAt") 
    query.findObjectsInBackgroundWithBlock{ 
     (posts: [AnyObject]?, error: NSError?) -> Void in 
     if error == nil { 
      for post in posts!{ 
       self.imageFiles.append(post["imageFile"]as! PFFile) 
       self.imageText.append(post["imageText"]as! String) 
      } 


    for var i = 0; i < self.pictNumber; ++i { 
     var userImageFile = self.imageFiles[i] 
     println(userImageFile) 
     var imgFileData = userImageFile.getData() 
     var image = UIImage(data: imgFileData!) 
     var tempImageView = UIImageView (image: image) 
     tempImageView.frame = CGRectMake(CGFloat(width*i), 0, self.view.frame.width, self.view.frame.height) 
     scrView.addSubview(tempImageView) 


     } 

我也嘗試過以下方法,但它會跳過從PFFile中提取圖像並將圖像添加到滾動視圖的部分。

let scrView = UIScrollView() 

    var query = PFQuery(className: "Pictures") 
    query.whereKey("uploader", equalTo: PFUser.currentUser()!) 
    query.orderByDescending("createdAt") 
    query.findObjectsInBackgroundWithBlock{ 
     (posts: [AnyObject]?, error: NSError?) -> Void in 
     if error == nil { 
      for post in posts!{ 
       self.imageFiles.append(post["imageFile"]as! PFFile) 
       self.imageText.append(post["imageText"]as! String) 
      } 


    for var i = 0; i < self.pictNumber; ++i { 
     var userImageFile = self.imageFiles[i] 
     println(userImageFile) 

     //Extracting pictures from PFFile 
     self.imageFiles[i].getDataInBackgroundWithBlock{ 
      (imageData: NSData?, error: NSError?) -> Void in 
      if imageData != nil { 
       var image = UIImage(data: imageData!) 
       var tempImageView = UIImageView (image: image) 
       tempImageView.frame = CGRectMake(CGFloat(width*i), 0, self.view.frame.width, self.view.frame.height) 
       scrView.addSubview(tempImageView) 
       println(i) 

      }else { 
       println(error) 
      }} 



     } 

回答

0

你得到錯誤:

Warning: A long-running operation is being executed on the main thread.

這意味着你必須做任務到主線程,您可以通過使用此代碼做到這一點:

dispatch_async(dispatch_get_main_queue()) { 
    //add your code here 
} 
+0

感謝您的輸入,但同樣的錯誤仍然會發生。 – Eri

+0

讓我看看你的代碼是什麼? –

+0

dispatch_async(dispatch_get_main_queue()){ VAR imgFileData = userImageFile.getData() – Eri

1

嘗試使用userImageFile .getDataInBackgroundWithBlock()代替userImageFile.getData()

userImageFile.getData獲取fil e在主線程中可能會凍結您的用戶界面,如果文件很大或者您的網絡連接速度較慢

相關問題