объективный делегат - PullRequest
0 голосов
/ 22 августа 2009

я сейчас работаю с геокодированием. Служба геокодирования всегда работает с делегатами.

Итак, скажем, у меня есть

AskingClass и AnswereringClass (геокодирование)

AskingClass вызывает функцию в AnswereringClass для возврата адреса текущего местоположения.

AnswereringClass должен обрабатывать и скрывать геокодирование. Моя проблема в том, что со всеми этими делегатами мне не удается вернуться к оригинальной функции, которую вызвал запрашивающий класс. Поэтому я не могу легко вернуть адрес обратно:

AskingClass.Adress = [AnswereringCour giveAdress];

Мне удалось это сделать, сделав это с делегатами, поэтому результат возвращается в функцию делегата (где-то) в askClass. Но я не доволен этим. Это кажется негабаритным и сложным.

с наилучшими пожеланиями

Клаус-Дитер

1 Ответ

1 голос
/ 23 августа 2009

Неясно, почему вы вообще используете шаблон делегата. Почему бы просто не использовать прямые классы?

Примерно так (при условии, что вы используете файл PCH для заголовочных файлов или импортируете их по мере необходимости):

AnsweringClass.h

@interface AnsweringClass:NSObject
- (MyAnswer *)answerThisDude;
@end

AskingClass.h

@class AnsweringClass;  // just in case you including AskingClass.h before AnsweringClass.h
@interface AskingClass : NSObject
// {
// declare the ivar if you need support for 32 bit "classic" ABI
//    AnsweringClass *theThingThatAnswers;
// }
@property(retain) AnsweringClass *theThingThatAnswers;
@end

Тогда вы можете сделать это:

AskingClass.m

@implementation AskingClass
@synthesize theThingThatAnswers;
- (void) setUpMyStuff  // probably invoked by your designated initializer or app launch handler
{
    self.theThingThatAnswers = [AnsweringClass new];
    MyAnswer *theFirstAnswer = [self.theThingThatAnswers answerThisDude];
}

// don't forget a -dealloc if you aren't running GC'd
@end

Делегирование не требуется.

...