2009-07-16 2 views
1

У меня есть массив булевых (soundArray), который изменяется на основе ввода пользователем. Поэтому он принадлежит основному UIView, с которым пользователь взаимодействует. Между тем, в другом отдельном контроллере (GestureController) мне нужен доступ к этому soundArray, поэтому я могу передать его как параметр в вызове метода.Передача ручек между ViewController и View

Я уверен, что ViewController не должен выкапывать свойства UIView, которым он не владеет (правильный MVC), поэтому я создал другой указатель на soundArray в ViewController (MusicGridController), который владеет основной 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, мне нужно установить указатель на SoundArray в UIView MusicGridView ... так что я сделал это:

- (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, но он сделал ошибку, и я не понимаю, почему. Поэтому мой вопрос: правильная ли реализация? Как я могу получить от одного viewController к свойству данного UIView?

ответ

1

Я не уверен, что я понимаю, к кому принадлежит NSArray, или к которому принадлежит должно быть, но вы можете попробовать использовать AppDelegate, если он должен быть глобальным объектом (доступ к которому осуществляется более чем одним видом и/или контроллер).

Теперь, чтобы решить вашу проблему. Ваша реализация не является ошибкой, и предупреждение исчезнет, ​​если вы добавите (MusicGridView *) до self.view. Это связано с ошибкой, которую вы получили, когда вы пробовали self.soundArray = self.view.soundArray, и причина проста: UIView не имеет свойства soundArray, а self.view - указатель на UIView. Бросив self.view на номер MusicGridView *, вы избавитесь от предупреждения, и ваш код должен работать нормально.

Смежные вопросы