Добавить аргумент в протокол (делегат)
Я хочу добавить аргумент в метод делегата (из 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];
}