我正在 segue 上设置一个委托,但我需要将其设置为现有SfnViewController
,而不是这里似乎正在发生的事情正在创建一个新委托。
如何访问现有SfnViewController
以使其通过?
class ViewerListController {
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
editViewer = fetchedResultController.objectAtIndexPath(indexPath) as? Viewer
performSegueWithIdentifier("editViewer", sender: indexPath)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "editViewer" {
let editViewerViewController = segue.destinationViewController.topViewController as! EditViewerViewController
editViewerViewController.viewer = editViewer
//Need this as the existing SfnViewController
editViewerViewController.delegate = SfnViewController()
}
}
}
我们无法真正帮助您,因为您没有提供足够的信息。你说你有一个现有的SfnViewController。
- 此对象是在何时何地创建的?
- 谁拥有它?
- 您的 ViewListController 是否有对它的引用?
如果整个对象只有一个共享的 SfnViewController,则应考虑遵循单例设计模式,并使 SfnViewController 成为单例。然后,您将使用 SfnViewController 类的类方法来获取对单一实例的引用。
如果你的意思是使用一些特定的控制器,你可以在tableView:accessoryButtonTappedForRowWithIndexPath:方法中确定,那么在调用performSegueWithIdentifier时,你应该在"sender"属性中发送它,如下所示:
class ViewerListController {
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
editViewer = fetchedResultController.objectAtIndexPath(indexPath) as? Viewer
performSegueWithIdentifier("editViewer", sender: editViewer)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "editViewer" {
let editViewerViewController = segue.destinationViewController.topViewController as! EditViewerViewController
editViewerViewController.viewer = editViewer
let editViewer = sender as! EditViewerViewController
editViewerViewController.delegate = editViewer.delegate
}
}
}