Пользовательские проблемы делегатов - PullRequest
1 голос
/ 26 апреля 2011

мой метод протокола не вызывается ... Я новичок в программировании на obj-c ...

У меня есть файл заголовка для протокола

.......... CanUpdateTime.h .....................

#import <Foundation/Foundation.h>

@protocol CanUpdateTime

-(BOOL)canUpdateTime;

@end

..............class интерфейс, в котором я объявляю свою переменную-делегат и устанавливаю ее свойство ..............

#import <UIKit/UIKit.h>
#import "Currency.h"
#import "CanUpdateTime.h"

@protocol CanUpdateTime;
@interface CurrencyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource > {


    Currency *currency;
    UILabel *dayMonthYear;



    id <CanUpdateTime> update;  
}

@property (nonatomic, retain) Currency *currency;
@property (nonatomic, retain) IBOutlet UILabel *dayMonthYear;

@property (nonatomic, assign) id <CanUpdateTime> update;

........ файл реализации ..............

-(void)viewDidLoad {

  [[self update]canUpdateTime];
}

..... класс, в который я поместил определение метода делегата ...

@interface ExchangeRatesProvider : NSObject <NSXMLParserDelegate,CanUpdateTime> {

and so on ...

}

....файл реализации ..................

-(BOOL)canUpdateTime {


  NSLog (@"ok");

        return YES;  
}

но ничего не происходит ... я попытался перейти к методу de update (делегата) responsedsToSelector, но ничего не происходит... мой метод делегата не отвечает ... любые идеи ... ???

ps извините за мой английский ... спасибо за внимание ...

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

В ExchangeRatesProvider вы должны установить делегата для CurrencyViewController как

currencyController.update = self;

, где currencyController - это экземпляр CurrencyViewController

0 голосов
/ 26 апреля 2011

Мое лучшее предположение заключается в том, что ваша переменная обновления никогда не была заполнена экземпляром ExchangeRatesProvider.В какой-то момент в вашем коде и перед вызовом [[self update] canUpdateTime] вам нужно поместить в переменную объект, соответствующий вашему протоколу.

Глядя на ваш код, я думаю, что здесь пропущена строка:

ExchangeRatesProvider* provider = [[ExchangeRatesProvider alloc] init];
[[self setUpdate:provider];

Эти строки могут быть в самом начале viewDidLoad или в методе init.Не забудьте освободить провайдера, когда закончите с [self setUpdate:nil]

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