Отправка делегата в качестве идентификатора вместо установки его в качестве свойства? - PullRequest
0 голосов
/ 12 октября 2011

У меня есть объект класса, который я часто использую из разных мест.

Теперь я использую класс следующим образом:

myClass.delegate = self;
[myClass doSomething];

doSomething создает новый объект классаэто вычисляет вещи и может занять до 1 минуты, прежде чем он отправит результат делегату, как это:

-(void)doSomething {
   CalculateStuff *calc = [[calculateStuff alloc] init];
   calc.delegate = self;
   [calc calculate];
}

/* Calculate Delegate */
-(void)didCalculate {
   [[self delegate] didDoSomething];
}

Проблема в том, что я из другого места вызываю то же, что и мой последний делегат, иэто вызывает много проблем.

Вопрос:

Есть ли способ отправить делегат как объект, не устанавливая его в качестве свойства?Я написал это так, и XCode предупреждает меня «Неполная реализация MyClass»

[myClass doSomethingWithDelegate:self];

И

-(void)doSomethingWithDelegate:(id)delegate {
   CalculateStuff *calc = [[calculateStuff alloc] init];
   [calc calculateWithDelegate:delegate];
}

/* Calculate Delegate */
-(void)didCalculateWithDelegate:(id)delegate {
   [delegate didDoSomething];
}

РЕДАКТИРОВАТЬ Просто опробовал и этоКажется, работает, но как я могу избавиться от предупреждений в Xcode?

1 Ответ

1 голос
/ 12 октября 2011

Я думаю, что ваша проблема в том, что вы забыли удалить объявление doSomething и didCalculate из интерфейса вашего класса (или расширения класса).

В идеале вы должны создать протокол, чтобы у вашего делегата был требуемый метод (ы).Например:

@protocol DoSomethingDelegate <NSObject>
- (void)didDoSomething;
@end

Затем используйте id<DoSomethingDelegate> вместо id.

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

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