2016-05-25 9 views
0

私はこの問題を多くの問題を解決するために探しましたが、誰も私を助けませんでした。 2つのviewControllerを持っていて、配列を1つずつ送る必要があります。他のViewControllerのメソッドを呼び出す| Swift

最初の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インスタンスを作成することで、そのインスタンス変数にアクセスできるようになりました。

セグの途中であるView Controllerから別のView Controllerに情報を渡す場合は、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

私は最初のビューから別のビューに配列を送信し、現在のビューが2番目の場合、受け入れられた配列は空です。どうして? –

+0

2番目のView Controllerに識別子を与えていない可能性はありますか?これをテストする1つの方法は、 'if segue.identifier ....'ビットを削除することです。私が知っているView Controllerには、いくつかのセグがあることがわかります。 'segue'が' SubmitViewController'になるという事実を知っているなら、 'if'ステートメントなしでテストしてください。 –

+0

私はビューを変更するperformSegueWithIdentifier( "送信"、送信者:自己)のボタンを使用します。だから私はまだボタンとprepareForSegueを使用することができますか? –

1

あなたはあなたのタイプメソッド内の自己を参照しています。 はここでAppleがその問題にこう言われる、型メソッドの本体内

は、暗黙の自己プロパティは に型自体ではなく、その型のインスタンスを参照します。構造体 と列挙型の場合、これは、 インスタンスプロパティとインスタンスメソッドパラメータの場合と同様に、selfを使用して型プロパティと型メソッドパラメータの間で の曖昧さを解消できることを意味します。

さらに一般的に、タイプメソッドの本体内で を使用する修飾されていないメソッドおよびプロパティ名は、他のタイプレベルの メソッドおよびプロパティを参照します。型メソッドは、他の型のメソッド を他のメソッドの名前と一緒に呼び出すことができます。接頭辞は です。同様に、構造体および列挙型のメソッドは 型の接頭辞なしの型プロパティの名前を使用してアクセス型のプロパティを呼び出すことができます。

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

そのように行うようにしてください:

var contentAccepted = [String]() 

class func acceptContent(content: [String]){ 

    ViewController().contentAccepted = content 

} 

あなたは本当に種類-方法が必要であることを確認してください。

関連する問題