метод протокола не вызывается объектом делегата - PullRequest
0 голосов
/ 13 марта 2012

Еще один случай, когда метод протокола не вызывается - понятия не имею, что я здесь не так делаю ...

Вот код, пропускающий ненужную информацию ...

первый заголовочный файл:AccessNumber.h

@protocol AddItemDelegate <NSObject>
@required
- (void) processSuccessful: (BOOL)success;
@end

@interface AccessNumber : UIViewController <UITableViewDelegate, UITableViewDataSource, ABPeoplePickerNavigationControllerDelegate, UIAlertViewDelegate> {

id <AddItemDelegate> delegate;

}
@property (retain) id <AddItemDelegate> delegate;
@end

первый файл .m: AccessNumber.m - я вызываю метод протокола из viewdidload только для целей тестирования, его в основном следует вызывать из другого метода, но то же самое радиэтот конво (пробовал оба конечно)

#import "AccessNumber.h"
#import "History.h"

@synthesize delegate;

- (void)viewDidLoad
{
         [super viewDidLoad];

....

     [[self delegate] processSuccessful:YES];
}

второй заголовок файла: History.h

@interface History : UIViewController <UITableViewDelegate, UITableViewDataSource, AddItemDelegate> {
 ....
    }

реализация метода в history.m

- (void) processSuccessful: (BOOL)success {

NSLog(@"SUCCESS");
}

Ценить любойПомогите.Спасибо!

Ответы [ 3 ]

6 голосов
/ 13 марта 2012

В коде я не вижу что-то вроде:

theAccessNumber.delegate = self;

Вы должны установить экземпляр History как свойство делегата экземпляра AccessNumber.

С уважением.

3 голосов
/ 13 марта 2012

Код кажется немного забавным, но вы не сообщаете своему классу «AccessNumber», кто является его делегатом, даже если вы заставляете класс «History» реализовывать протокол, установленный вами (в противном случае вы получите предупреждение).

Вы должны установить делегат для класса "AccessNumber", например, при настройке изнутри "AccessNumber.m":

self.delegate = historyInstance;

или как при настройке изнутри"History.m":

accessNumberInstance.delegate = self;
1 голос
/ 13 марта 2012

Существуют очень сложные ситуации, когда вы должны сохранить делегата, обычно ваш делагат переживет объект.Так что поменяйте свою собственность с удержания на присвоение.И убедитесь, что вы устанавливаете делегата.Где ты это делаешь?Если ваш объект действительно зависит от него, вы должны передать его в конструктор (iniWithDelagate).Попробуйте выполнить NSLog перед вызовом метода delagate, чтобы посмотреть, не равен ли он nil.

...