2016-09-05 75 views
0

當您在屏幕上按下試圖獲取不同視圖中的函數時,我只需要執行 viewControllerFuncIsIn()。NameOfFunc () ,但因爲具有函數im試圖調用的視圖控制器類是SCNView。它給了我ns編碼器這個錯誤,因爲在當前在Skscene enter image description here im試圖調用的函數是在一個稱爲Extra1的類下面的viewdidload(不在其中)。如何從不同類別的不同視圖控制器調用函數

更新下面的評論:

Extra1(coder:NSCoder())!.see() 

enter image description here

+0

您是否閱讀過或發現了錯誤?你正嘗試使用init方法'init(withCoder coder :))'而不通過編碼器 –

+0

是的我得到一個錯誤不適當的更新我的代碼@Simon McLoughlin – Hunter

+3

嘗試使用代表或通知 –

回答

2

你小例子:

使用委託時連接一對一。

代表:

創建協議:

protocol TestViewControllerDelegate { 
    func finishTask(sender: TestViewController) 
} 

創建委託參考。它應該很弱很重要。

weak var delegate:TestViewControllerDelegate? 

退出您的課堂。

extension MainViewController: TestViewControllerDelegate { 
    func finishTask(sender: TestViewController) { 

    } 
} 

電話委託:

當連接是一對多
delegate?. finishTask(self) 

使用的通知。

通知:

添加觀察員通知。

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ClassName.test), name:"NotificationIdentifier", object: nil) 

發佈通知。

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) 
+0

好酷,但是這是一個錯誤我無法修復弱var委託:TextViewControllerDelegate?它表示弱可能只適用於類和類綁定的proticol類型,而不是'TestViewControllerDeleggate',它只是在說知道我在哪裏放置那行代碼@Oleg Gordiichuk – Hunter

0

我喜歡回答我的問題

func mySelector(elem: AnyObject) { 
    Extra1().see() 
} 

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.mySelector), name: "see", object: nil) 

NSNotificationCenter.defaultCenter().postNotificationName("see", object: self) 
相關問題