2016-03-02 80 views
1

我的應用程序獲取圖像就好,但如果我上下滾動一段時間,然後拉刷新,它崩潰並說數組超出索引。這不會每次都發生。我相信這跟我沒有使用getdatainbackground的事實有關,但是當我使用它而不是getData()時,它比實際檢索文件的循環更快,而且它們失靈。陣列從索引獲取PFFile時從索引

我目前的代碼也給我這個錯誤:Break on warnBlockingOperationOnMainThread()來調試。 2016-03-02 00:35:48.630應用程序名稱[1137:96655]警告:正在主線程上執行長時間運行的操作。

if Reachability.isConnectedToNetwork() { 
     self.skip = 0 
     //--RESETTING THE ARRAYS FOR DATA--\\ 
     self.contactText.removeAll(keepCapacity: true) 
     self.names.removeAll(keepCapacity: true) 
     self.images.removeAll(keepCapacity: true) 
     self.prices.removeAll(keepCapacity: true) 
     self.sizes.removeAll(keepCapacity: true) 
     self.conditions.removeAll(keepCapacity: true) 
     self.dates.removeAll(keepCapacity: true) 
     self.ids.removeAll(keepCapacity: true) 
     self.createdBy.removeAll(keepCapacity: true) 


     //--RESET THE USERS LOCATION WHEN HE REFRESHES IN CASE OF A DARASTIC MOVE IN LOCATION--\\ 
     let userGeoPoint = PFUser.currentUser()!["location"] as! PFGeoPoint 

     //--GETTING ALL OF THE OBJECTS WITHIN 60 MILES OF USERS CURRENT LOCATION--\\ 
     let query = PFQuery(className:"Shoes") 
     query.whereKey("Location", nearGeoPoint: userGeoPoint, withinMiles: 60) 
     let user = PFUser.currentUser() as PFUser! 
     let array: AnyObject? = user["blockedUsers"] 
     if(array != nil){ 
      query.whereKey("createdBy", notContainedIn: array! as! [AnyObject]) 
     } 
     query.limit = 50 
     query.orderByDescending("createdAt") 
     query.skip = self.skip 

     query.findObjectsInBackgroundWithBlock { 
      (objects: [AnyObject]?, error: NSError?) -> Void in 
      if error == nil { 
       print("Successfully retrieved \(objects!.count) scores.") 
       for object in objects! { 

        if let dateCreated = object.createdAt as NSDate? { 
         self.dates.append(dateCreated) 
        } 

        self.contactText.append(object["Contact"] as! String) 
        self.descriptions.append(object["Description"] as! String) 
        self.names.append(object["Name"] as! String) 


        if object["price"] as! String == "" || object["price"] == nil{ 
         self.prices.append("Negotiable") 
        }else{ 
         self.prices.append(object["price"] as! String) 
        } 

        if object["size"] as! String == "" || object["size"] == nil{ 
         self.sizes.append("N/A") 
        }else{ 
         self.sizes.append(object["size"] as! String) 
        } 

        if object["conditionType"] as! String == "" || object["conditionType"] == nil{ 
         self.conditions.append("N/A") 
        }else{ 
         self.conditions.append(object["conditionType"] as! String) 
        } 

        self.ids.append(object.valueForKey("objectId") as! String) 
        self.createdBy.append(object["createdBy"] as! String) 

        let imageFile = object["imageFile"] as! PFFile 
        let imageData = imageFile.getData() 

        if (imageData != nil) { 
         let image = UIImage(data:imageData!) 
         self.images.append(image!) 

        } 


       } 
       dispatch_async(dispatch_get_main_queue(), { 
        self.tableView.reloadData() 
       }) 

      } 
      else { 
       print(error) 
      } 

      self.refresher.endRefreshing() 
     } 

     self.skip+=50 

    } else { 
     print("Internet connection not available") 
     self.refresher.endRefreshing() 
     let alert = UIAlertView(title: "No Internet connection", message: "Please ensure you are connected to the Internet", delegate: nil, cancelButtonTitle: "OK") 
     alert.show() 
    } 

回答

1

嘗試添加檢查以確保將數據分配給單元格時數組不爲空。