我试图通过segue(show)传递NSManagedObject的indexPath,所以在目标中我可以显示动态信息。我尝试了多种方法,但都遇到了错误。这是我目前正在尝试的方法,但它不起作用。有人可以解释一下我做错了什么和/或最有效的方法吗?
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objectives.count
}
...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let controller = segue.destinationViewController as ObjectiveDetailViewController
if segue.identifier == "ObjectiePrototypeCell" {
controller.indexPath = self.tableView.indexPathForCell(sender)
}
}
错误(调用tableView.indexPathForCell时发生):'(UITableView,numberOfRowsInSection:Int) - > Int'没有名为'indexPathForCell'的成员。
我需要添加一些东西到numberOfRowsInSection函数吗?
import UIKit
import CoreData
class ObjectiveDetailViewController: UIViewController {
var objectives = [NSManagedObject]()
var indexPath: NSIndexPath?
lazy var managedContext: NSManagedObjectContext = {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext
return managedContext!
}()
var obj = objectives[indexPath.row]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
错误(在声明obj时调用目标时发生):'ObjectiveDetailViewController.Type'没有名为'targets'的成员。
这个错误我不知道出了什么问题,因为我显然已经启动了目标数组。我是否宣布了错误的内容或者我没有提供足够的信息?
答案 0 :(得分:4)
我相信第一个错误(尽管有奇怪的错误信息)与numberOfRowsInSection无关。由于发件人是一个条件AnyObject,你需要打开它并向下转发它:
controller.indexPath = self.tableView.indexPathForCell(sender! as UITableViewCell)
第二个错误是由于在方法之外访问数组引起的。您应该将该行移动到viewDidLoad中(并且您还需要解包indexPath),
override func viewDidLoad() {
super.viewDidLoad()
var obj = objectives[indexPath!.row]
}
但是,还有另一个问题,因为在尝试访问它之前,尚未向阵列中添加任何NSManagedObjects。
或许,您想要做的是传递在表视图中选择的托管对象,而不是传递indexPath。