Swift将PFQuery转换为TableView的string数组

我试图查询我的数据库中的所有parsing用户,然后在tableview中显示每个单独的用户在他们自己的单元格。 我已经build立了我的tableview,但我坚持把用户查询保存到可以在tableview中使用的string数组。 我创build了一个loadParseData函数,在后台查找对象,然后将查询的对象追加到string数组中。 不幸的是,我在附加数据的行上给出了一条错误消息。

Implicit user of 'self' in closure; use 'self.' to make capture semantics explicit' Implicit user of 'self' in closure; use 'self.' to make capture semantics explicit'在我看来,这是我build议使用self. 而不是usersArray. 因为这是在一个闭包,但我给了另一个错误,如果我这样运行, *classname* does not have a member named 'append'

这是我的代码:

 import UIKit class SearchUsersRegistrationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { var userArray = [String]() @IBOutlet var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func loadParseData(){ var query : PFQuery = PFUser.query() query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in if error != nil{ println("\(objects.count) users are listed") for object in objects { userArray.append(object.userArray as String) } } } } let textCellIdentifier = "Cell" func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //return usersArray.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as SearchUsersRegistrationTableViewCell let row = indexPath.row //cell.userImage.image = UIImage(named: usersArray[row]) //cell.usernameLabel?.text = usersArray[row] return cell } } 

问题是userArray是一个NSArray。 NSArray是不可改变的,这意味着它不能被改变。 因此它没有附加function。 你想要的是一个NSMutableArray,可以改变,并有一个addObject函数。

 var userArray:NSMutableArray = [] func loadParseData(){ var query : PFQuery = PFUser.query() query.findObjectsInBackgroundWithBlock { (objects:[AnyObject]!, error:NSError!) -> Void in if error == nil { if let objects = objects { for object in objects { self.userArray.addObject(object) } } self.tableView.reloadData() } else { println("There was an error") } } } 

另外,因为对象是以“AnyObject”的forms返回的,所以你必须在某个时刻把它们转换成PFUser才能使用。 只是要记住的东西

获取用户的用户名并显示它

//把它放在cellForRowAtIndexPath中

 var user = userArray[indexPath.row] as! PFUser var username = user.username as! String cell.usernameLabel.text = username