Добавить аргумент в протокол (делегат)

Я хочу добавить аргумент в метод делегата (из NSXMLParserDelegate)

это метод до сих пор:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    // save the characters for the current item...
    if ([string   isEqual: @"off"]) {
         myObject.isON = NO; //doesn't know what is myObject
    }

Что я хочу:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string:(MyObject*)anObject{
    // save the characters for the current item...
    if ([string   isEqual: @"off"]) {
         anObject.isON = NO;
    }

Спасибо

1 ответ

Решение

Сначала вам нужно создать подкласс NSXMLParser, Добавить новое delegate собственность называть это subclassDelegate или что-то подобное, так что вы можете различить делегата суперкласса. В init быть делегатом вашего суперкласса self.delegate = self;

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

Вот пример:

    @protocol  MyXMLParserDelegate;
@interface MyXMLParser : NSXMLParser<NSXMLParserDelegate>
@property (weak) id<MyXMLParserDelegate> subclassDelegate;
@end

@protocol  MyXMLParserDelegate <NSObject>
- (void)parserDidStartDocument:(NSXMLParser *)parser;
// this is the method that you override
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string withObject:(id)object;
@end

Тогда в.м

@implementation MyXMLParser

- (id)init
{
    self = [super init];
    if(self) {
        self.delegate = self;
    }
    return self;
}


#pragma mark - repspond to NSXMLParser delegate

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [self.subclassDelegate parser:parser foundCharacters:string withObject:yourObject];
}
Другие вопросы по тегам