将数据从 ViewController 传递到 NSObject

Posted

技术标签:

【中文标题】将数据从 ViewController 传递到 NSObject【英文标题】:Pass Data from ViewController to 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 中,我不能使用相同的命令来检索数据。有没有办法做我想做的事?

【问题讨论】:

【参考方案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 作为实例变量?

以上是关于将数据从 ViewController 传递到 NSObject的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 ViewController 传递到 TabViewController

将数据从 TableView 传递到 ViewController

将数据从 UITableViewCell 传递到 ViewController

将数据从 ViewController 传递到 NSObject

将数组数据从 ViewController 传递到 TableView

将数据从 ViewController 传递到 AppDelegate