1

ユーザー入力に基づいて変更されるブール値の配列(soundArray)があります。したがって、ユーザーが操作しているメインUIViewによって所有されます。一方、別の別のコントローラー(GestureController)では、このsoundArrayにアクセスする必要があるため、メソッド呼び出しでパラメーターとして渡すことができます。

ViewControllerが所有していないUIViewのプロパティを掘り下げてはいけないと確信しているので(正しいMVC)、メインUIView(MusicGridView)を所有しているViewController(MusicGridController)にsoundArrayへの別のポインターを作成しました)。

GestureControllerには、次のコードがあります。

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

(最終的には、その配列にさらに多くのsoundArrayが含まれるようになります)。

ここで、MusicGridControllerで、UIView MusicGridViewの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;
}

self.soundArray = self.view.soundArrayを試しましたが、エラーが発生し、理由がわかりません。だから私の質問は:これは正しい実装ですか?1つのviewControllerから特定のUIViewのプロパティに移動するにはどうすればよいですか?

4

1 に答える 1

1

NSArray が誰に属しているか、または誰に属すべきかはわかりませんが、AppDelegate がグローバル オブジェクト (複数のビューやコントローラーによってアクセスされる) であると想定される場合は、AppDelegate を利用してみてください。

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

于 2009-07-17T01:09:32.250 に答える