2009-07-16 3 views
1

私は、ユーザー入力に基づいて修正されたブール値の配列(soundArray)を持っています。したがって、ユーザーが対話しているメインのUIViewが所有します。一方、別の別のコントローラ(GestureController)では、このsoundArrayへのアクセスが必要なので、メソッド呼び出しのパラメータとして渡すことができます。ViewControllerとビューの間のハンドルを渡す

ViewControllerは所有していないUIViewのプロパティを掘り出すべきではないと確信しています。したがって、私は所有しているViewController(MusicGridController)のsoundArrayへの別のポインタを作成しました。主UIView(MusicGridView)。 GestureControllerで

、私は次のコードを持っている:

// instantiate the sound thread 
    NSArray *soundArrayPointers = [NSArray arrayWithObjects:self.musicGridViewController.soundArray, nil]; 
    [NSThread detachNewThreadSelector:@selector(metronome:) toTarget:[MusicThread class] withObject:soundArrayPointers]; 

(最終的に私はその配列内のより多くのsoundArraysがあるでしょう)。

さて、MusicGridControllerで、私はので、私はこれをしなかった... UIViewのMusicGridViewにSoundArrayへのポインタを設定する必要があります:私はself.soundArray = self.view.soundArrayを試してみました

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.view.frame = CGRectMake(20, 0, 480, 480); 
    MusicGridView *tempview = self.view; // this line gives me a warning that I am initializing from a distinct Objective-C type, which I don't understand. 

    self.soundArray = tempview.soundArray; 
} 

が、それは間違いを投げた、なぜ私は理解していない。だから私の質問です:これは正しい実装ですか? 1つのviewControllerから特定のUIViewのプロパティを取得するにはどうすればよいですか?

答えて

1

NSArrayが誰に属しているのかわかるか分かりません。に属している必要がありますが、AppDelegateをグローバルオブジェクト(複数のビューおよび/またはコントローラ)。

今、あなたの問題を解決してください。あなたの実装は間違っていないので、self.viewの前に(MusicGridView *)を追加すると警告が消えてしまいます。これは、self.soundArray = self.view.soundArrayを試したときのエラーと関連しており、理由は簡単です。UIViewにはsoundArrayプロパティがなく、self.viewUIViewへのポインタです。 self.viewMusicGridView *にキャストすると、警告が表示されなくなり、コードが正常に動作するはずです。

関連する問題