Вопрос делегации - PullRequest
       2

Вопрос делегации

0 голосов
/ 25 февраля 2011

структура кода

@protocal A_Delegate
{
     -(void)doIt:(BOOL)isDone;
}

Super Class A // has properties of set delegate
-(void) setDelegate:(id<A_Delegate>)_delegate
{
       /*self.delegate = _delegate*/ error, compiler stops right there and doesn't assigns the value from '_delegate'

self.delegate = _delegate .

       //should be
       delegate = _delegate;
}

Sub Class B : A // want to call and define the delegation for the super class of B which is A
-(void) acquireDelegation:(id<A_Delegate>)_delegate
{
       [[super delegate] setDelegate];
}

Теперь, класс C хочет использовать класс B и хочет знать его состояние,

Class C : NSObject <A_Delegation>
-(void) doSomething
{
     B *b = [[B alloc]init];
     [b aquireDelegation:self];
}
-(void)doIt:(BOOL)isDone
{
      if(isDone)
      // Do Something
}

Кто-нибудь знает, что я сделал неправильно и почему супер не может делегировать? Можно ли исправить?

решена.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

Это приведет к бесконечному циклу (до переполнения стека):

-(void) setDelegate:(id<A_Delegate>)_delegate
{
       self.delegate = _delegate; // error, compiler stops right there and doesn't assigns the value from '_delegate'
}

причина self.delegate = _delegate; вызывает setDelegate:.Вы должны назначить самому ивару.

И я думаю, что это не компилятор.Это все во время выполнения ...

0 голосов
/ 25 февраля 2011

Есть пара вопросов.Во-первых, это определение протокола, ну, не одно.Синтаксис все неправильно.Во-вторых, что такое «Суперкласс A», что означает комментарий?

В любом случае, основная проблема заключается в методе setDelegate :.Если вы определили свойство делегата, то строка:

self.delegate = _delegate;

равна строке:

[self setDelegate:_delegate];

Итак, в методе -setDelegate вы вызываете -setDelegate.

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