所以我要使用Swift 2和Xcode 7创建一个应用程序,并使用Parse作为后端服务。
我有两个视图控制器,一个PFQueryTableViewController
用于显示PFObjects列表,另一个用于显示所选单元格的详细信息。
我想办法是将唯一的对象ID附加到数组,然后使用didSelectRowAtIndexPath
执行segue。
但是我在这里将元素追加到数组时遇到了问题。加班,我追加并打印数组,它显示元素2次。因此,如果正确的数组是[1,2,3,4],那么我得到的是[1,2,3,4,1,2,3,4],真的很奇怪。
var arrayOfGameId = [String]()
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cellIdentifier = "cell"
var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? PFTableViewCell
if cell == nil {
cell = PFTableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
}
if let object = object {
cell!.textLabel?.text = object["Title"] as? String
cell!.detailTextLabel?.text = object["Platform"] as? String
if let thumbnail = object["Image"]! as? PFFile {
cell!.imageView!.image = UIImage(named: "game1.png")
cell!.imageView!.file = thumbnail
}
let gameid = object["GameId"] as! String!
arrayOfGameId.append(gameid)
}
print(arrayOfGameId)
return cell
}
最佳答案
由于使用的是PFQueryTableViewController
,因此无需创建自己的objectId列表。
从PFObjects
返回的queryForTable
将自动存储在名为objects
的列表中。
如果您需要获取所选对象并连接到详细视图控制器,则实际上甚至不需要使用didSelectRowAtIndexPath
,请尝试以下操作。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using [segue destinationViewController]
var detailsVC = segue.destinationViewController as! DetailsViewController
// Pass the selected object to the destination view controller
if let indexPath = self.tableView.indexPathForSelectedRow() {
let row = Int(indexPath.row)
// selectedObject is the PFObject to be displayed
detailsVC.selectedObject = (objects?[row] as! PFObject)
}
}
关于ios - 重复的值附加在PFQueryTableViewController中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33150891/