Передача дескрипторов между ViewController и View - PullRequest
1 голос
/ 17 июля 2009

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

Я почти уверен, что 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];

(со временем у меня будет больше массивов звука в этом массиве).

Теперь в 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 Ответ

1 голос
/ 17 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...