实例化实现它们的类时,不会调用Delegate方法

时间:2012-08-01 21:26:15

标签: objective-c ios ios5 ios4

我的解析器使用MWFeedParserDelegate delagate,它完全调用doneParsingObjects

@interface Parser ()<MWFeedParserDelegate> 
...
-(void) doneParsingObjects{
      NSLog(@"test");
}

现在,如果在另一个类中,我分配了解析器,我的委托方法doneParsingObjects永远不会被调用。

Parser * newsParser = [[Parser alloc]init];

我知道我可以将委托添加到另一个类但是想知道为什么当我启动一个解析器对象&amp;实现委托,委托方法不会被触发。


/* my View Controller */
@implementation getSourceAndTopicViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    Parser * newsParser = [[Parser alloc]init];
    newsParser.dataSource = self;
    NSURL * feedURL = [NSURL URLWithString:@"http://news.yahoo.com/rss/"];
    [newsParser parseURL:feedURL];
}
/* this method never gets called. Don't know why */
-(void) Parser:(parserViewController *)parser doneParsingObjects:(NSMutableArray *)parsedItems{
    NSLog(@"Method was called");
}
_______________________________________
/* Parser.h Class */
@class Parser;
@protocol ParserDataSource
   -(void) Parser:(Parser *)parser doneParsingObjects:(NSMutableArray *)parsedItems;
@end
@interface Parser : NSObject
@property (nonatomic, weak)id <ParserDataSource > dataSource;
/* Parser.m 
I'd like to call my own datasource method in the viewController once MWFeedParser calls back feedParserDidFinish */
@interface Parser ()<MWFeedParserDelegate>{
    MWFeedParser *feedParser;
}
...
@end
@implementation Parser
...
/* This method is supposed to be called by the MWFeedParserDelegate but never gets triggered from my view controller when I instantiate newParser */
- (void)feedParserDidFinish:(MWFeedParser *)parser {
        NSLog(@"%@", self.MWFeedItems);
    [self.dataSource Parser:self doneParsingObjects:self.parsedItems; 
}

我知道如果我在视图控制器中使用MWFeedParserDelegate,这个问题就会解决,但我想让解析器成为处理MWFeedParserDelegate的解析器。

2 个答案:

答案 0 :(得分:1)

仅仅创建一个对象不会调用委托方法。该对象旨在提供给另一个使用委托方法的对象。

答案 1 :(得分:0)

事实证明,我的解析器超出了范围,因为它是在本地定义的。定义依赖于其他委托的委托可以完美地运行。您只需要确保实现委托的对象定义为属性。非常棘手。

感谢大家的回复。