1

XML を解析してキャッシュするために使用しているシングルトンがあります。解析/キャッシュはブロックで行われます。シングルトンの外部から URL を変更できるように、別のクラスからこのブロックに引数を渡す方法はありますか?

これが私が今持っているコードです:

// The singleton
+ (FeedStore *)sharedStore
{
    static FeedStore *feedStore = nil;
    if(!feedStore)
        feedStore = [[FeedStore alloc] init];

    return feedStore;
}

- (RSSChannel *)fetchRSSFeedWithCompletion:(void (^)(RSSChannel *obj, NSError *err))block
{
    NSURL *url = [NSURL URLWithString:@"http://www.test.com/test.xml"];

    ...

    return cachedChannel;
}

NSURL を変更する必要があるクラスは次のとおりです。

- (void)fetchEntries
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

    // Initiate the request...

    channel = [[BNRFeedStore sharedStore] fetchRSSFeedWithCompletion:
           ^(RSSChannel *obj, NSError *err) {
        ...
    }
}

fetchEntriesからに引数を渡すにはどうすればよいfetchRSSFeedWithCompletionですか?

4

1 に答える 1

4

ブロックではなく、メソッドにパラメーターを追加する必要があります。

また、完了ブロックを使用する場合、メソッドで何かを返す必要はありません。

次のように変更します。

-(void)fetchRSSFeed:(NSURL *)rssURL completion:(void (^)(RSSChannel *obj, NSError *error))block{
    RSSChannel *cachedChannel = nil;
    NSError *error = nil;

    // Do the xml work that either gets you a RSSChannel or an error

    // run the completion block at the end rather than returning anything
    completion(cachedChannel, error);
}
于 2012-08-31T16:58:06.827 に答える