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) {
        ...
    }
}

如何从fetchEntriesto传递参数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 回答