在 ViewController 之间传递 NSManagedObject

Posted

技术标签:

【中文标题】在 ViewController 之间传递 NSManagedObject【英文标题】:Passing a NSManagedObject between ViewControllers 【发布时间】:2016-11-22 10:59:30 【问题描述】:

我正在尝试在 2 个 ViewControllers 之间传递一个 NSManagedObject。 为此,我使用了一个全局变量。

在第一个 viewcontroller 我有,在顶部(作为全局变量):

var choosenItem : NSManagedObject? = nil

我建立了我的表格视图,我有这个:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    let choosenOne = listOfLands[indexPath.row]
    let choosenItem = listOfLands[indexPath.row]


    let viewController = storyboard?.instantiateViewController(withIdentifier: "ViewController2")
    self.navigationController?.pushViewController(viewController!, animated: true)

    print(choosenOne.objectID)
    print(choosenItem.objectID)


当我打印选择的 objectId 时,我得到了它们。所以我认为在这个ViewController 中一切正常。

在 ViewController2 我有这个:

   override func viewDidLoad() 

 print(thatLand?.objectID) //result is nil


现在我不确定为什么我在第二个 ViewController 中得到 nil。 有没有办法像这样通过NSManagedObject

【问题讨论】:

【参考方案1】:

您需要通过将choosenItem 分配给ViewController2thatLand 属性来传递它,还需要将UIViewController 显式转换为ViewController2

let viewController = storyboard?.instantiateViewController(withIdentifier: "ViewController2") as! ViewCotroller2 //Cast as ViewController name

//Now set thatLand property with your array's selected object before pushing it to Navigation stack
viewController.thatLand = listOfLands[indexPath.row]

self.navigationController?.pushViewController(viewController!, animated: true)

【讨论】:

做到了。现在,当我执行此“viewController.thatLand = listOfLands[indexPath.row]”时,我收到一条消息说 ViewController2 没有成员“thatLand”。如何在 vc2 中初始化“thatLand”? @H.N.我说的是这个print(thatLand?.objectID),你在你的问题上提到了。 我也是。你告诉过我吗。我认为没关系。但现在我得到“ViewController2 类型的值作为非成员 thatLand”。 @H.N.如果没有,则创建一个var thatLand : NSManagedObject? @H.N.欢迎朋友:)

以上是关于在 ViewController 之间传递 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章

故事板 Segue 与委派。哪种方法更适合在 ViewController 之间传递数据

在 Swift 中的 ONE ViewController 中的视图之间传递数据

如何在 ViewController 之间传递委托

如何在 PageViewController 和 ViewController 之间传递数据?

如何使用 StoryBoard 在 NavigationController 和 ViewController 之间传递值?

在 TapBarController 内的 ViewController 和 NavigationController 之间传递值