将数据从ViewController传递给NSObject

时间:2015-05-05 14:27:49

标签: objective-c swift segue viewcontroller nsobject

我有一个快速类Jammingue,其中在objective-c中有一个名为tryagain的NSObject。我知道如何使用协议在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仅用于viewcontrollers,而在segue的另一端,在objective-c NSObject中,我不能使用相同的命令来检索数据。有办法做我想做的事吗?

1 个答案:

答案 0 :(得分:0)

你的问题不是很清楚。我想想你问的是如何在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类型的实例变量,因此您可以将自定义对象传递给目标视图控制器。