【问题标题】:Pass NSManagedObject from one view controller to another将 NSManagedObject 从一个视图控制器传递到另一个视图控制器
【发布时间】:2014-06-21 20:47:24
【问题描述】:

我正在使用 CoreData 和 Swift 开发基于表格视图的应用程序。我正在尝试将 NSManagedObject 从一个视图控制器传递到另一个视图控制器。下面是我得到的代码和错误。

ViewController1.swift我有以下代码:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {

    if segue.identifier == "Edit" {
        var selectedItem: NSManagedObject = myData[self.tableView.indexPathForSelectedRow().row] as NSManagedObject
        let vc2: ViewController2 = segue.destinationViewController as ViewController2

        vc2.item = selectedItem

    }
}

ViewController2.swift:

class ViewController2: UIViewController {

    @NSManaged var item : NSManagedObject

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    // Other default func
}

当我转到 ViewController2 时出错:

[_TtC6myData18ViewController2 setItem:]: unrecognized selector sent to instance 0x111530000

【问题讨论】:

  • 尝试删除@NSManaged,据我了解,它只应该用于NSManagedObject 子类,而不是视图控制器。
  • @rdelmar 当我这样做时,它说 ViewController2 类没有初始化程序
  • 变量项目:NSManagedObject!或 var item : NSManagedObject?我不确定你应该使用哪个。
  • 这消除了错误,但随后说无法分配给 vc2 @rdelmar 中的项目
  • 如果你把它放在一个没有!或 ?, init(coder aDecoder: NSCoder!) { var item : NSManagedObject }

标签: ios core-data swift nsmanagedobject


【解决方案1】:

@NSManaged 限定符只应该用于 NSManagedObject 子类中的属性,因此不应该在您的情况下使用它。这应该可行,

class ViewController2: UIViewController {

    var item : NSManagedObject! 

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    // Other default func
}

【讨论】:

    【解决方案2】:

    在异常上设置断点,以便您可以看到NSException 中的实际错误/消息是什么。您还可以看到它被扔到哪里。

    【讨论】:

    • 我这样做了,我得到了 [_TtC6myData18ViewController2 setItem:]: unrecognized selector sent to instance 0x111530000 知道这意味着什么兄弟吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多