主线程pfquerytableviewcontroller

时间:2017-06-03 02:56:12

标签: ios swift xcode parse-platform swift3

我有一个pfquery tableview控制器,在我的pfquerytableviewcontroller中加载了类中的许多pfobjects。我有问题。当我刷新我的表视图时,我在调试器中收到此错误“警告:正在主线程上执行长时间运行的操作。  打破warnBlockingOperationOnMainThread()进行调试。“。当我尝试在我的tableview中滑动时,tableview滞后并且滑动非常缓慢。我认为发生这种情况是因为数据正在主线程上加载。这是我的代码。有人可以告诉我我可以做些什么来解决这两个问题。非常感谢。谢谢

answer

1 个答案:

答案 0 :(得分:0)

为什么不使用普通的tableViewController?

var show = 0
let maxload = 250
var objects = [PFObject]()

func loaddata() {
    self.objects.removeAll(keepingCapacity: false)
    self.show = 25

    let query = PFQuery(className:"Ledger")
    query.limit = self.maxload
    query.findObjectsInBackground {
        (objects: [PFObject]?, error: Error?) -> Void in
        if error == nil {
            if let objects = objects as [PFObject]! {
                for object in objects {
                    self.objects.append(object)
                }
                //reload TableView
                self.tableView.reloadData()
                print("retrieved \(self.objects.count)")

            }
        }
    }
}

@IBAction func refreshButton(_ sender: AnyObject) {
    loaddata()
    self.tableView.reloadData()
}

func numberOfSections(in tableView: UITableView) -> Int {
    if self.objects.count <= 0 {
        return 0
    } else {
        if show > self.objects.count {
            return self.objects.count
        } else if show > maxload {
            return maxload
        } else {
            return show
        }
    }
}


func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if (indexPath as NSIndexPath).section == self.show - 1 {
        self.show += 25
        print("showing more data")
    }
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewController

    if self.objects.count - 1 > (indexPath as NSIndexPath).section {
        let objects = self.objects[(indexPath as NSIndexPath).section] 
    }

    return cell
}