arrays - Swift 字符串数组一直显示为空

标签 arrays swift

我有一个函数可以连接到我的解析数据库并遍历所有用户对象并将他们的姓名和电子邮件附加到每个类别的字符串数组中。

当我调试它时,它显示数组在 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
}

问题是在 viewWillAppear() 运行并将数据提取到数组之前,cellForRowAtIndexPath 正在运行并填充表。

我试过在 viewWillAppear 的开头添加这个

UIApplication.sharedApplication().beginIgnoringInteractionEvents()

然后 .endIgnoringInteractionEvents() 在 vi​​ewWillAppear 的末尾,但这也没有解决它。

最佳答案

您正在从您的 block 中调用 self.tableView.reloadData(),该 block 在后台线程上运行。所有与 UI 相关的操作都必须在主线程上运行。尝试像这样包装调用以重新加载:

self.users_names.removeAtIndex(1)
self.users_emails.removeAtIndex(1)
dispatch_async(dispatch_get_main_queue()) { 
    self.tableView.reloadData()
}

关于arrays - Swift 字符串数组一直显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37081262/

相关文章:

arrays - 有条件地减少 Mongo 聚合中的两个数组字段

python - 创建多维零点 Python

json - 如何将 JSON 对象转换为可读的 swift 对象?

ios - WKWebView 中的 EXC_BAD_ACCESS 和/或 EXC_BREAKPOINT - 可能的更改以快速修复

arrays - 这是 Ruby 中 Array.fill 方法的错误吗?

javascript - 使用 javascript 循环对象并将结果放入数组

ios - SKScene 节点未检测到触摸

swift - 当我添加内循环时,For 循环没有被执行

ios - 使用 NavigationBar 标题子类化 UIViewController

c - 使用函数在数组中查找最大和最小数