-1

私のパーサーは、doneParsingObjects を完全に正常に呼び出す MWFeedParserDelegate delagate を使用します

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

別のクラスでパーサーを割り当てた場合、デリゲート メソッド doneParsingObjects が呼び出されることはありません。

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

デリゲートを別のクラスに追加できることはわかっていますが、デリゲートを実装するパーサー オブジェクトを開始したときに、デリゲート メソッドがトリガーされない理由を知りたいです。


/* 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 を処理するパーサーにしたいと考えています。

4

2 に答える 2

1

オブジェクトを作成するだけでは、デリゲート メソッドは呼び出されません。このオブジェクトは、デリゲート メソッドを使用する別のオブジェクトに提供されることを意図しています。

于 2012-08-01T21:29:41.483 に答える
0

私のパーサーはローカルで定義されていたため、範囲外であることが判明しました。他のデリゲートに依存するデリゲートを定義すると、完全に機能します。プロパティとして定義されたデリゲートを実装するオブジェクトを確認するだけです。非常にトリッキーです。

返信ありがとうございます。

于 2012-08-02T03:34:13.180 に答える