Swift 将 PFQuery 转换为 TableView 的字符串数组
Swift Converting PFQuery to String Array for TableView
我正在尝试查询我数据库中的所有 Parse 用户,然后在表格视图中将每个用户显示在他们自己的单元格中。我已经设置了我的表视图,但我坚持将用户查询保存到可以在表视图中使用的字符串数组。我创建了一个 loadParseData
函数,它在后台查找对象,然后将查询到的对象追加到字符串数组中。不幸的是,我在附加数据的行上收到一条错误消息。
Implicit user of 'self' in closure; use 'self.' to make capture semantics explicit'
在我看来,建议我使用 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 是不可变的,这意味着它不能被改变。因此它没有追加功能。你要的是一个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',您必须在某些时候将它们转换为 PFUsers 才能按原样使用它们。只是要记住一些事情
用于获取用户的用户名并显示它
// 将其放入 cellForRowAtIndexPath
var user = userArray[indexPath.row] as! PFUser
var username = user.username as! String
cell.usernameLabel.text = username
我正在尝试查询我数据库中的所有 Parse 用户,然后在表格视图中将每个用户显示在他们自己的单元格中。我已经设置了我的表视图,但我坚持将用户查询保存到可以在表视图中使用的字符串数组。我创建了一个 loadParseData
函数,它在后台查找对象,然后将查询到的对象追加到字符串数组中。不幸的是,我在附加数据的行上收到一条错误消息。
Implicit user of 'self' in closure; use 'self.' to make capture semantics explicit'
在我看来,建议我使用 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 是不可变的,这意味着它不能被改变。因此它没有追加功能。你要的是一个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',您必须在某些时候将它们转换为 PFUsers 才能按原样使用它们。只是要记住一些事情
用于获取用户的用户名并显示它
// 将其放入 cellForRowAtIndexPath
var user = userArray[indexPath.row] as! PFUser
var username = user.username as! String
cell.usernameLabel.text = username