2017-05-01 19 views
0

Objective-Cの新機能で、あるNSViewから別のNSViewにNSArray値を渡す適切な方法を見つけようとしています。私のコードは次のようになります。NSViewからのObjective-C渡し値

NSViewOne:

NSLog(@"%@", arrayValues); // 10, 20, 30 
NSViewTwo *displayValues = [[NSViewTwo alloc] init]; 
[displayValues showValuesFromOne:arrayValues]; 

NSViewTwo:NSViewOneで

- (void)showValuesFromOne:(NSArray *)sender { 
    NSArray *arrayValues = sender; 
    NSLog(@"%@", arrayValues); 
} 

配列値を示し、NSViewTwoに私は(ヌル)を取得します。誤解がある

+0

xibまたはストーリーボードの2番目のビューはありますか?はいの場合、最初のスニペットで作成されたビューは全く異なるインスタンスです。 Btw: 'getValues'は実際に**何かを設定するメソッドの混乱する名前です** **。 – vadian

+0

@vadian:どちらのNSViewも2つのファイルで別々のクラスで、.nibウィンドウ(osx)で表示されます。私は、メソッドを混乱させないように改名しました。 –

+0

次に、 'IBOutlet'を使って.nibの2を見るための実際の参照が必要です。 '[[NSViewTwo alloc] init]'は新しい(別の)インスタンスを作成します。 – vadian

答えて

0

:すべてのアクションメソッドの

まず、あなたのコードではなく、出口点までGUIからのエントリポイントです。渡された値は常に送信者です。あなたのコードからアクションメソッドを使うことはできますが、これはめったに役に立ちません。だから-showValuesFromOne:はまったく意味がありません。

第2に、ビューから別のビューに値を渡すことは珍しいことです。ビューはコントローラと通信し、その逆もあります。したがって、ビュー1のコードはコントローラ内にあり、ビュー1によって実行されるはずです。次に、呼び出されたコントローラコードは値を2にプッシュします。これにはアクションメソッドを使用しないでください。

コントローラーは両方のnibをロードするため、両方のビューにコンセントがあります。したがって、コントローラの場合、両方のビューとの通信が容易です。糸は彼の手に収束する。

+0

しかし、 'IBAction'ではなく' void'を使っています。私はちょうど "a"(値) - > xを "b"(値) - > xにする必要があります。 –

+0

あなたは 'IBAction'は何ですか?ただし、配列は送信者ではありません。 –

+0

私はIBActionがIBOutletと一緒に使用されると考えましたが、それは単なる推測です。 NSArraryが送信者でない場合、何がありますか?ありがとう。 –