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