我有一个函数将连接到我的解析数据库并遍历所有用户对象,并将其名称和电子邮件附加到每个类别的字符串数组中。
当我调试它时,它会在viewWillAppear函数中将数组显示为具有正确的值,但是当它返回到返回数组中的行数时,由于某种原因它们是空的。
知道造成这种情况的原因是什么?
这是我的代码
import UIKit
import Parse
class ContactTableViewController: UITableViewController {
//arrays to hold user's name and email
var users_names = [String]()
var users_emails = [String]()
override func viewWillAppear(animated: Bool){
//Load user email and name
let query: PFQuery = PFUser.query()!
query.findObjectsInBackgroundWithBlock {
(objects:[PFObject]?, error:NSError?) -> Void in
if error == nil {
// The find succeeded.
print("Successfully retrieved \(objects!.count) users.")
// Do something with the found objects
if let user_objects = objects {
for user in user_objects {
self.users_names.append(user.valueForKey("name") as! String)
self.users_emails.append(user.valueForKey("email") as! String)
}
}
} else {
// Log details of the failure
print("Error: \(error!) \(error!.userInfo)")
}
self.users_names.removeAtIndex(1)
self.users_emails.removeAtIndex(1)
self.tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(red: 0.8353, green: 0.9098, blue: 0.902, alpha: 1.0)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
//return number of rows in table
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users_names.count
}
问题是cellForRowAtIndexPath正在运行并在viewWillAppear()运行之前填充表并将数据提取到数组中。
我尝试在viewWillAppear
的开头添加它UIApplication.sharedApplication().beginIgnoringInteractionEvents()
然后.endIgnoringInteractionEvents()在viewWillAppear的末尾但是没有修复它。
答案 0 :(得分:2)
您正在通过后台线程运行的块中调用self.tableView.reloadData()
。所有与UI相关的操作都必须在主线程上运行。尝试将调用包装为重新加载,如下所示:
self.users_names.removeAtIndex(1)
self.users_emails.removeAtIndex(1)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}