Didselectrowatindexpath 在获取CoreData后在tableView中选择一行,以将结果传递给sender View Controller

Didselectrowatindexpath 在获取CoreData后在tableView中选择一行,以将结果传递给sender View Controller,didselectrowatindexpath,nsindexpath,Didselectrowatindexpath,Nsindexpath,作为Swift iOs编码的新手,我一直在努力解决这个问题。希望有人能给我指出正确的方向 在下面的代码中,我对具有人名的CoreData实体执行Fetchrequest。得到结果后,我将尝试点击相应的行名称,并将其传递回调用此视图的ViewController,该视图使用prepare for segue 但每次单击要选择的名称行时,我都会遇到一个:**由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:UITableView使用的索引路径

作为Swift iOs编码的新手,我一直在努力解决这个问题。希望有人能给我指出正确的方向

在下面的代码中,我对具有人名的CoreData实体执行Fetchrequest。得到结果后,我将尝试点击相应的行名称,并将其传递回调用此视图的ViewController,该视图使用prepare for segue

但每次单击要选择的名称行时,我都会遇到一个:**由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:UITableView使用的索引路径无效。传递到表视图的索引路径必须正好包含两个指定节和行的索引。如果可能,请使用UITableView.h中nsindepath上的类别。”

似乎我以错误的方式调用了indexPath

下面是我的代码:

    .....
    .....

    let fetchedResults =
    managedObjectContext.executeFetchRequest(fetchRequest,
        error: &error) as [NSManagedObject]?

    if let results = fetchedResults {
        names = results
    } else {
        println("Could not fetch \(error), \(error!.userInfo)")
    }
}

// MARK: - UITableViewDataSource

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return names.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("KidCell") as UITableViewCell

    let kidName = names[indexPath.row]
    cell.textLabel!.text = kidName.valueForKey("kidName") as String?
    if kidName != selectedKid {
        cell.accessoryType = .None

    } else {
        cell.accessoryType = .Checkmark
        selectedIndexPath = indexPath
    }

    return cell
}

// MARK: - UITableViewDelegate

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.row != selectedIndexPath.row {
        if let newCell = tableView.cellForRowAtIndexPath(indexPath) {
            newCell.accessoryType = .Checkmark
        }

        if let oldCell = tableView.cellForRowAtIndexPath(selectedIndexPath) {
            oldCell.accessoryType = .None
        }

        selectedIndexPath = indexPath
    }
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SelectedKid" {
        let cell = sender as UITableViewCell
        if let indexPath = tableView.indexPathForCell(cell) {
            let kidName = names[indexPath.row]
            selectedKid = kidName.valueForKey("kid") as String!
        }
    }
} }

这个想法是,当我点击这个名字时,我会返回到发送者控制器,并将所选的名字放在正确的位置

谢谢你的帮助!
克里斯蒂亚诺

你的问题在于以下几行

let cell = tableView.dequeueReusableCellWithIdentifier("KidCell") as   UITableViewCell

let kidName = names[indexPath.row]
cell.textLabel!.text = kidName.valueForKey("kidName") as String?
你的代码应该看起来像

let cell = tableView.dequeueReusableCellWithIdentifier("KidCell", forIndexPath: indexPath ) as UITableViewCell

let kidName = names[indexPath.row]
cell.textLabel!.text = kidName.valueForKey(kidName)

谢谢你,很抱歉回复晚了!