计算在 PFTableQueryViewController 中找到的对象
Counting found objects in PFTableQueryViewController
我正在尝试计算 PFQueryTableViewController
中找到的对象的数量。
我试过使用
override func queryForTable() -> PFQuery {
let query = PFQuery(className: self.parseClassName!)
query.whereKey("member", equalTo: memberId!)
let count = query.countObjectsInBackground()
label.text = "\(count)"
return query
}
但是我的应用程序会崩溃。
编辑:
问题不在于进行查询并计算其对象。问题是使用 queryForTable
将我的查询传递给 PFQueryTableViewController
的 cellForRowAtIndexPath
cellForRowAtIndexPath
看起来像这样:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell:DetailApplicantCell = self.table.dequeueReusableCellWithIdentifier("reuseIdentifier") as! DetailApplicantCell
if let name = object?.objectForKey(self.textKey!) as? String{
cell.nameLbl.text = name
}
cell.groupImage.image = UIImage(named: "People.png")
if let imageFile = object?.objectForKey(self.imageKey!) as? PFFile{
cell.groupImage.file = imageFile
cell.groupImage.loadInBackground()
}
return cell
}
注意这不是默认的 cellForRow
尝试使用 query.findObjectsInBackgroundWithBlock
方法并获取响应对象的 size()
let query = PFQuery(className: self.parseClassName!)
query.whereKey("member", equalTo: memberId!)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let count = objects.size()
label.text = "\(count)"
if let object = objects as? [PFObject] {
}
} else {
// Log details of the failure
print("Error: \(error!)")
}
}
你在 2 个地方强制展开,使用 if let
:
func queryForTable() -> PFQuery? {
if let parseClass = self.parseClassName {
let query = PFQuery(className: parseClass)
if let id = memberId {
query.whereKey("member", equalTo: id)
}
let count = query.countObjectsInBackground()
label.text = "\(count)"
return query
}
return nil
}
然后你像这样使用你的函数:
if let query = queryForTable() {
//your query related code here.
}
我找到了一个更好的方法 PFQueryTableViewController
,而不是第二次 PFQuery
:
override func objectsDidLoad(error: NSError?) {
super.objectsDidLoad(error)
print("objectsDidLoad")
if let results = self.objects{
print("objectsFound")
self.groupsCountLbl.text = "\(results.count)"
self.groupsCountLbl.fadeIn()
}
}
VC有一个属性objects
的数组AnyObject?
。
使用 objectsDidLoad
函数确定时间,一切都已加载。
我正在尝试计算 PFQueryTableViewController
中找到的对象的数量。
我试过使用
override func queryForTable() -> PFQuery {
let query = PFQuery(className: self.parseClassName!)
query.whereKey("member", equalTo: memberId!)
let count = query.countObjectsInBackground()
label.text = "\(count)"
return query
}
但是我的应用程序会崩溃。
编辑:
问题不在于进行查询并计算其对象。问题是使用 queryForTable
将我的查询传递给 PFQueryTableViewController
cellForRowAtIndexPath
cellForRowAtIndexPath
看起来像这样:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell:DetailApplicantCell = self.table.dequeueReusableCellWithIdentifier("reuseIdentifier") as! DetailApplicantCell
if let name = object?.objectForKey(self.textKey!) as? String{
cell.nameLbl.text = name
}
cell.groupImage.image = UIImage(named: "People.png")
if let imageFile = object?.objectForKey(self.imageKey!) as? PFFile{
cell.groupImage.file = imageFile
cell.groupImage.loadInBackground()
}
return cell
}
注意这不是默认的 cellForRow
尝试使用 query.findObjectsInBackgroundWithBlock
方法并获取响应对象的 size()
let query = PFQuery(className: self.parseClassName!)
query.whereKey("member", equalTo: memberId!)
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
let count = objects.size()
label.text = "\(count)"
if let object = objects as? [PFObject] {
}
} else {
// Log details of the failure
print("Error: \(error!)")
}
}
你在 2 个地方强制展开,使用 if let
:
func queryForTable() -> PFQuery? {
if let parseClass = self.parseClassName {
let query = PFQuery(className: parseClass)
if let id = memberId {
query.whereKey("member", equalTo: id)
}
let count = query.countObjectsInBackground()
label.text = "\(count)"
return query
}
return nil
}
然后你像这样使用你的函数:
if let query = queryForTable() {
//your query related code here.
}
我找到了一个更好的方法 PFQueryTableViewController
,而不是第二次 PFQuery
:
override func objectsDidLoad(error: NSError?) {
super.objectsDidLoad(error)
print("objectsDidLoad")
if let results = self.objects{
print("objectsFound")
self.groupsCountLbl.text = "\(results.count)"
self.groupsCountLbl.fadeIn()
}
}
VC有一个属性objects
的数组AnyObject?
。
使用 objectsDidLoad
函数确定时间,一切都已加载。