Didselectrowatindexpath 在获取CoreData后在tableView中选择一行,以将结果传递给sender View Controller
作为Swift iOs编码的新手,我一直在努力解决这个问题。希望有人能给我指出正确的方向 在下面的代码中,我对具有人名的CoreData实体执行Fetchrequest。得到结果后,我将尝试点击相应的行名称,并将其传递回调用此视图的ViewController,该视图使用prepare for segue 但每次单击要选择的名称行时,我都会遇到一个:**由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:UITableView使用的索引路径无效。传递到表视图的索引路径必须正好包含两个指定节和行的索引。如果可能,请使用UITableView.h中nsindepath上的类别。” 似乎我以错误的方式调用了indexPath 下面是我的代码:Didselectrowatindexpath 在获取CoreData后在tableView中选择一行,以将结果传递给sender View Controller,didselectrowatindexpath,nsindexpath,Didselectrowatindexpath,Nsindexpath,作为Swift iOs编码的新手,我一直在努力解决这个问题。希望有人能给我指出正确的方向 在下面的代码中,我对具有人名的CoreData实体执行Fetchrequest。得到结果后,我将尝试点击相应的行名称,并将其传递回调用此视图的ViewController,该视图使用prepare for segue 但每次单击要选择的名称行时,我都会遇到一个:**由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:UITableView使用的索引路径
.....
.....
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)
谢谢你,很抱歉回复晚了!