1

我正在尝试通过 segue(显示)传递 NSManagedObject 的 indexPath,因此在目的地我可以显示动态信息。我尝试了多种方法,但都得到了错误。这是我目前正在尝试的方法,但它不起作用。有人可以解释我做错了什么和/或最有效的方法吗?

源视图控制器中的 numberOfRowsInSection 和 prepareForSegue 代码

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”没有名为“objectives”的成员。

这个错误我不知道出了什么问题,因为我显然已经启动了目标数组。我是否错误地声明了某些内容,或者我没有提供足够的信息?

4

1 回答 1

4

我相信第一个错误(尽管有奇怪的错误消息)与 numberOfRowsInSection 无关。由于 sender 是一个条件 AnyObject,因此您需要将其解包并向下转换:

controller.indexPath = self.tableView.indexPathForCell(sender! as UITableViewCell)

第二个错误是由在方法之外访问您的数组引起的。您应该将该行移到 viewDidLoad 中(并且您还需要解开 indexPath),

override func viewDidLoad() {
    super.viewDidLoad()
    var obj = objectives[indexPath!.row]
}

但是,还有另一个问题,因为在尝试访问它之前,您还没有将任何 NSManagedObjects 添加到您的数组中。

不过,您可能想要做的是传递在表视图中选择的托管对象,而不是传递 indexPath。

于 2014-11-05T07:14:12.670 回答