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