2016-05-25 66 views
0

我尋找解決這個問題的很多問題,但沒有人幫助我。 有2個viewControllers,我需要發送數組從一個到另一個。從其他ViewController |調用方法斯威夫特

調用方法在第一的viewController:

SubmitViewController.acceptContent(content) 

在其他接受:

var contentAccepted = [String]() 

class func acceptContent(content: [String]){ 

    contentAccepted = content 

} 

的課題在承擔contentAccepted線上的錯誤:實例構件不能在類型UIViewController

使用

回答

0

您遇到的問題是,contentAccepted是一個實例變量(它應該是),而acceptContent()是一個類方法。所以,你的方法不能得到你的變量。在能夠訪問其變量之前,您需要創建一個SubmitViewController的實例。

let submitViewController = SubmitViewController() 
submitViewController.contentAccepted = content 

通過首先創建SubmitViewController實例,您現在可以訪問該實例變量。

如果您正在從一個視圖控制器向另一個視圖控制器傳遞信息,那麼您可以考慮使用prepareForSegue

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

     if segue.identifier == "Submit" { 
      if let view = segue.destinationViewController as? SubmitViewController { 
       view.contentAccepted = content // If content is an instance variable 
      } 

     } 
    } 
+0

好吧,所以當我從第一個視圖發送數組到另一個,而我當前的視圖是第二個,接受的數組是空的。爲什麼? –

+0

有沒有可能你沒有給你的第二個視圖控制器一個標識符?測試這種方法的一種方法是刪除'if segue.identifier ....'位。我在視圖控制器中使用它,我知道會有幾個segues。如果你知道'segue'將會是'SubmitViewController',然後在沒有'if'語句的情況下測試它。 –

+0

我用performSegueWithIdentifier(「Submit」,sender:self)來改變視圖的按鈕。那麼我該如何繼續使用按鈕並準備好賽? –

1

你指的是你的類型方法中的自我。 這裏是蘋果公司說的那件事:

在類型方法的主體,隱含的自我屬性是指 類型本身,而不是類型的實例。對於結構體 和枚舉,這意味着您可以使用self來區分類型屬性和類型方法參數之間的 ,就像您對 實例屬性和實例方法參數所做的那樣。

更一般地,你使用 一種方法體內的任何不合格的方法和屬性名稱會參考其他類型級 方法和屬性。類型方法可以使用另一種方法的名稱調用另一種類型的方法 ,而不需要使用 類型名稱作爲前綴。同樣,結構和枚舉類型方法可以通過使用類型屬性的名稱而不用 類型名稱前綴來訪問類型屬性 。

More info on type-methods (class-methods) can be found here

嘗試做這樣的說法:

var contentAccepted = [String]() 

class func acceptContent(content: [String]){ 

    ViewController().contentAccepted = content 

} 

確保你真正需要的類型的方法。