Ios 解析和Swift。从解析关系设置tableViewCell附件类型

Ios 解析和Swift。从解析关系设置tableViewCell附件类型,ios,uitableview,parse-platform,Ios,Uitableview,Parse Platform,所以,我有一个显示课程的桌面视图。用户可以在这些课程(单元格)上设置复选标记,并将其保存在PFUser对象中,作为与课程类(存储所有课程)的关系。 我的问题是,如何勾选用户以前保存的课程 这是我的尝试,但我不知道如何继续。如何获得带有特定标签的单元格?(还是有更好的办法?) 编辑:该代码在我的override viewDidLoad中 编辑2: override func tableView(tableView: UITableView, cellForRowAtIndexPath indexP

所以,我有一个显示课程的桌面视图。用户可以在这些课程(单元格)上设置复选标记,并将其保存在PFUser对象中,作为与课程类(存储所有课程)的关系。 我的问题是,如何勾选用户以前保存的课程

这是我的尝试,但我不知道如何继续。如何获得带有特定标签的单元格?(还是有更好的办法?)

编辑:该代码在我的override viewDidLoad中

编辑2:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("courseCell") as! PFTableViewCell!
    if cell == nil {
        cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "courseCell")
    }

    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    let qObjects :Array = query!.findObjects()!


    // Extract values from the PFObject to display in the table cell
    if let courseName = object?["coursename"] as? String {
        cell?.textLabel?.text = courseName


        if contains(qObjects, object) {
            cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
        }
    }

    return cell
}
“如果包含(QObject,object){”

泛型参数“S.Generator.Element”不能绑定到非@objc协议类型“AnyObject”

编辑3:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {

    var cell = tableView.dequeueReusableCellWithIdentifier("courseCell") as! PFTableViewCell!
    if cell == nil {
        cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "courseCell")
    }

    let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
    let query = courseRel!.query()
    let qObjects :Array = query!.findObjects()!


    // Extract values from the PFObject to display in the table cell
    if let courseName = object?["coursename"] as? String {
        cell?.textLabel?.text = courseName
        cell.tintColor = UIColor.blackColor()
    }

    if contains(qObjects, { $0 === object }) {
        cell?.accessoryType = UITableViewCellAccessoryType.Checkmark
        self.selectedRows.addIndex(indexPath.row)
    }else{
        cell?.accessoryType = UITableViewCellAccessoryType.None
    }

    return cell
}
编辑4:(工作代码)

在课堂上:

// Initializing qObject variable 
var qObjects :Array<AnyObject> = []
在我的表格视图(CellForRowatineXpath)中:


不要试图搜索手机。好吧,你可以,但不是像你想的那样-我会回来的

您当前的代码正在创建新的单元格,而不是查找现有的单元格,因此这将不起作用

您真正应该做的是存储返回对象的数组,
qObjects
,然后在配置单元格进行显示时,检查该数组是否包含当前单元格的对象。如果包含,请勾选它,否则请删除勾选

现在,如果在显示视图后加载
qObjects
,则有2个选项:

  • 重新加载表视图
  • 只更新可见的项目

  • 选项2.显然更好,尤其是当用户可能正在滚动列表时。要做到这一点,您需要使用通过在表视图上调用
    indexPathsForVisibleRows
    返回的数组。然后,迭代该列表,获取关联对象并检查其是否在
    qObjects
    中,然后使用
    cellForRowAtIn获取显示的单元格dexPath:
    并更新它。

    不要尝试搜索单元格。好吧,你可以,但不是像你尝试的那样-我会回到那

    您当前的代码正在创建新的单元格,而不是查找现有的单元格,因此这将不起作用

    您真正应该做的是存储返回对象的数组,
    qObjects
    ,然后在配置单元格进行显示时,检查该数组是否包含当前单元格的对象。如果包含,请勾选它,否则请删除勾选

    现在,如果在显示视图后加载
    qObjects
    ,则有2个选项:

  • 重新加载表视图
  • 只更新可见的项目

  • 选项2.显然更好,尤其是当用户可能正在滚动列表时。要做到这一点,您需要使用通过在表视图上调用
    indexPathsForVisibleRows
    返回的数组。然后,迭代该列表,获取关联对象并检查其是否在
    qObjects
    中,然后使用
    cellForRowAtIn获取显示的单元格dexPath:
    并更新它。

    谢谢你的回答。问题是,我正在使用PFQueryTableViewController类,它为我完成所有配置。知道我如何在该类中完成它吗?我知道,我可以在tableview中使用对象获取对象!但我不知道如何获取对象的单元格…相同,都是通过索引获取的,所以我需要使用'dequeueReusableCellWithIdentifier('courseCell',forIndexPath:indexPath'),对吗?但我如何获取索引路径?我的tableview中有节。所以'NSIndexPath(forItem…),但我如何为每个节中的每一行运行它?(我需要这样做才能将它们与我的QoObject进行比较,对吗?)不,出列创建一个新单元格,您使用
    cellforrowatinexpath:
    -您阅读了我的答案并理解了方法吗?您没有尝试刷新所有内容,如果您想这样做,只需重新加载表格,而不是全部。我的问题仍然是,我没有在代码中配置单元格。PFQueryTableViewController类会这样做在背景中。那么,我如何让我所有部分中的所有单元格与我的QObject数组进行比较?(我假设我需要某种循环,但我首先需要找出,我有多少行/部分和多少部分,对吗?)谢谢你的回答。问题是,我正在使用PFQueryTableViewController类,它为我完成所有配置。你知道我如何在该类中完成它吗?我知道,我可以用对象获取tableview中的对象!但我不知道如何获取对象的单元格…同样,都是通过索引PathKay实现的,所以我需要使用“DeQueueReuseABL”eCellWithIdentifier(“courseCell”,forIndexPath:indexPath)”,对吗?但我如何获取索引路径?我的表视图中有节。所以“NSIndexPath(forItem…),但我如何为每个节中的每一行运行它?(我需要这样做才能将它们与我的QoObject进行比较,对吗?)不,出列创建一个新单元格,您使用
    cellforrowatinexpath:
    -您阅读了我的答案并理解了方法吗?您没有尝试刷新所有内容,如果您想这样做,只需重新加载表格,而不是全部。我的问题仍然是,我没有在代码中配置单元格。PFQueryTableViewController类会这样做在背景中。那么,我如何让我所有部分中的所有单元格与我的QObject数组进行比较?(我假设我需要某种循环,但我首先需要找出,我有多少行/部分和多少部分,对吗?)谢谢你的回答。问题是,我正在使用PFQueryTableViewController类,它为我完成所有配置。你知道我如何在该类中完成它吗?我知道,我可以用对象获取tableview中的对象!但我不知道如何获取对象的单元格…同样,都是通过索引PathKay实现的,所以我需要使用“DeQueueReuseABL”eCellWithIdentifier(“courseCell”,forIndexPath:indexPath)”,对吗?但我如何获取索引路径?我的表视图中有节。所以“NSIndexPath(forItem…),但我如何才能为其中的每一行运行它
    // Initializing qObject variable 
    var qObjects :Array<AnyObject> = []
    
        // Get PFObjects for the checkmarks on courses the currentUser has already selected before
        let courseRel = PFUser.currentUser()?.relationForKey("usercourses")
        let query = courseRel!.query()
        qObjects = query!.findObjects()!
    
        // Extract values from the PFObject to display in the table cell
        if contains(qObjects, { $0 === object }) {
            cell.accessoryType = UITableViewCellAccessoryType.Checkmark
            self.selectedRows.addIndex(indexPath.row)
        } else {
            cell.accessoryType = UITableViewCellAccessoryType.None
        }