【问题标题】:Pass Data from ViewController to NSObject将数据从 ViewController 传递到 NSObject
【发布时间】:2015-05-05 14:27:49
【问题描述】:

我有一个 swift 类 Jammingue,其中在 Objective-c 中有一个 NSObject,称为 tryagain。我知道如何使用协议在 swift viewcontrollers 之间传递数据,但是这里添加的元素是 NSObject 而不是 ViewController 以及 Objective-C 元素。可以以类似的方式使用协议吗?这就是我所拥有的:

protocol predesignedDelegate{
func sendPredesignedFunction(info: [String])
}

class Jammingue: NSViewController{
var delegate: passDelegate? = nil
var predesignedArray = []

func doDelegateStuff(){
    if let delegate = delegate{
        delegate.sendPredesignedFunction(predesignedArray)

    }

}
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
    if let second = segue.destinationController as?  SecondViewController{
        second.representedObject = predesignedArray
    }
}`

问题是destinationController 仅适用于视图控制器,而在segue 的另一边,在objective-c NSObject 中,我不能使用相同的命令来检索数据。有没有办法做我想做的事?

【问题讨论】:

    标签: objective-c swift segue viewcontroller nsobject


    【解决方案1】:

    你的问题不是很清楚。我认为您问的是如何在 segue 中的视图控制器之间传递作为 NSObject 子类的自定义对象。

    如果您有 NSObject 的自定义子类,请使用该类类型而不是 NSObject。 Objective-C 标头可能如下所示:

    @interface MyCustomNSObject: NSObject
    
    @property (nonatomic, strong) //properties of your object go here...
    
    - (void) someMethod;  //your object's method(s) go here.
    @end
    

    然后在您的 Swift 代码中,将您的对象声明为 MyCustomNSObject 类型而不是 NSObject:

    在您的 SecondViewController 类中,声明该自定义类型的属性:

    class SecondViewController: NSViewController
    {
      var theCustomObject: MyCustomNSObject
      //The other stuff for SecondViewController goes here
    }
    

    然后在你的 Jammingue 课上:

    class Jammingue: NSViewController
    {
      var tryAgain: MyCustomNSObject
    
      // blah blah blah...
      override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) 
      {
        if let second = segue.destinationController as?  SecondViewController
        {
            second.representedObject = predesignedArray
          second.customObject = tryAgain
        }
      }
    }
    

    现在您的 Jammingue 类和您的 SecondViewController 类都有 MyCustomNSObject 类型的实例变量,因此您可以将自定义对象传递给您的目标视图控制器。

    【讨论】:

    • 感谢您发布如此详尽的答案。看起来它会起作用!谢谢
    • 不幸的是,我不认为这完全是我要问的。我所寻找的只是能够在其相应的 NSObject 中引用在 ViewController 中初始化和定义的变量,可能没有您发布的那么复杂。
    • 你是什么意思“......在其对应的NSObject......”?
    • 有一个 NSObject 作为我的 viewController 的子类,我希望 viewController 能够将数据传递给 NSObject。
    • 这仍然没有意义。 NSObject 不能是视图控制器的子类。这就像说你是你自己的祖母。你的意思是视图控制器有一个 NSObject 作为实例变量?
    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多