2016-06-01 11 views
1

Ich habe diese Frage ein paar Mal geschrieben, aber immer noch keine Lösung gefunden. Ich bin ein Parse mit gehosteten sdk @ back4app.comLong-Running-Operation wird auf Haupt-Thread ausgeführt

Empfang dieser Fehler:

Warnung: Eine lang andauernde Operation an der Haupt Thread ausgeführt wird. Break on warnBlockingOperationOnMainThread() zu debuggen.

In meiner home.swift Datei ist der Code:

func queryPosts(text:String) { 
    showHUD() 

    let query = PFQuery(className: POSTS_CLASS_NAME) 

    if text != "" { 
     let keywords = text.componentsSeparatedByString(" ") as [String] 
     query.whereKey(POSTS_QUOTE, containsString: "\(keywords[0])") 
    } 

    query.orderByDescending("createdAt") 
    query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error:NSError?)-> Void in 
     if error == nil { 
      self.postsArray = objects! 
      self.postsTableView.reloadData() 
      self.hideHUD() 

     } else { 
      self.simpleAlert("\(error!.localizedDescription)") 
      self.hideHUD() 
    }} 
} 

-

Die Daten geladen wird, und die App nicht abstürzt, aber der Fehler mich verrückt fährt. Ich bemerkte auch, dass es eine leichte Verzögerung gibt, wenn ich manchmal sogar für ein oder zwei Sekunden scrolle. Wenn jemand helfen kann, wird das großartig, danke.

+1

Sie müssen den Laden außerhalb der Haupt-Warteschlange zu tun, und wenn es fertig ist die Benutzeroberfläche von der Haupt Warteschlange zu aktualisieren. – DMH

+0

Was ist Ihre Frage? Möchten Sie wissen, wie eine Aufgabe im Hintergrund-Thread ausgeführt wird? – Feroz

+0

@feroz Tut mir leid, ich war nicht klar genug, meine Frage ist wirklich jede Art, die meinen Fehler stoppen wird, ich lese hier, um PFObject zu AnyObject zu ändern, und das hat nicht funktioniert, also ja, wie kann ich es auf einem Hintergrundthread ausführen ? Ich kann das versuchen. – OnlyDanWilliams

Antwort

1

Gemäß unserer Diskussion können Sie Ihre Methode mit den angegebenen Methoden ändern:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("PostCell", forIndexPath: indexPath) as! PostCell 

    // Resize quote label 
    cell.quoteView.frame = CGRectMake(30, 30, view.frame.size.width - 30*2, view.frame.size.width - 30*2) 


    let postRecord = postsArray[indexPath.row] 

    // Get User Pointer 
    let userPointer = postRecord[POSTS_USER_POINTER] as! PFUser 

    userPointer.fetchIfNeededInBackgroundWithBlock { (result, error) -> Void in 
     cell.avatarImage.image = UIImage(named: "logo") 
     let imageFile = userPointer[USER_AVATAR] as? PFFile 
     imageFile?.getDataInBackgroundWithBlock({ (imageData, error) -> Void in 
      if error == nil { 
       if let imageData = imageData { 
        cell.avatarImage.image = UIImage(data:imageData) 
       }}}) 
     cell.avatarImage.layer.cornerRadius = cell.avatarImage.bounds.size.width/2 


     cell.usernameLabel.text = "\(userPointer[USER_FULLNAME]!)" 


     cell.quoteLabel.text = "\(postRecord[POSTS_QUOTE]!)" 
     let quoteColor = postRecord[POSTS_COLOR] as! Int 
     cell.backgroundColor = colors[quoteColor] 
     cell.quoteView.backgroundColor = colors[quoteColor] 
    } 


    // Assign tags to buttons in the cell 
    cell.likeOutlet.tag = indexPath.row 
    cell.reportOutlet.tag = indexPath.row 
    cell.shareOutlet.tag = indexPath.row 
    cell.avatarOutlet.tag = indexPath.row 
    cell.commentOutlet.tag = indexPath.row 

    return cell 
    }