Вызов функции в контроллере из класса (target-c) - PullRequest
0 голосов
/ 14 января 2010

Я пишу приложение для iPhone в Objective-C. Я создал класс (Foo.m), который я хотел бы иметь возможность вызывать метод в контроллере (MainViewController.m), который его создал. Как мне это сделать? Пожалуйста, приведите пример. Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 января 2010

Прежде всего, я бы порекомендовал прочитать некоторые книги по шаблонам дизайна.Если ваш класс Foo является моделью, то почему ваша модель взаимодействует с контроллером?Если Foo является представлением, то почему он будет взаимодействовать с вашим контроллером?

Теперь, хотя я подозреваю, что у вашего приложения есть проблема с дизайном, как вы структурируете код, существуют способы сделать это.

Когда MainViewController.m создает экземпляр Foo, можете ли вы передать self и сохранить для Foo ссылку на него?

В качестве альтернативы вы должны создать @protocol в Foo, и когда MainViewController создает Foo, пусть MainViewController реализует delegate.

для Foo.
0 голосов
/ 14 января 2010

Вы, вероятно, должны проверить Шаблоны проектирования какао Эрика М. Бака и Дональда А. Яктмана. Это удивительно превосходная книга, и она вполне понятна, даже если вы еще не знакомы с шаблонами проектирования в целом.

Похоже, что вы хотите сделать, это то, что говорили другие парни, это шаблон под названием «Делегирование». Чтобы увидеть, как работает делегирование, посмотрите на все встроенные классы, которые его используют. Все, что имеет свойство delegate и протокол, такой как UIBlablaDelegate, использует делегирование, и вы можете сделать то же самое с вашими классами.

0 голосов
/ 14 января 2010

Один из способов сделать это - создать свойство в вашем классе Foo, которое ссылается на его создателя. Вы не должны сохранять эту ссылку, чтобы избежать циклических ссылок, но код может выглядеть следующим образом

-(void)yourControllerClassMethod{
    Foo* f = [[Foo alloc] init];
    [f setOwnder:self];
}

В этом случае ваш класс Foo имеет свойство под названием owner, которое устанавливается, когда класс Controller создает новый экземпляр Foo. Теперь из вашего класса Foo вы можете вызывать методы контроллера следующим образом:

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