1

言葉にするのは難しいですが、試してみてください。カテゴリ名の配列を持つ MenuViewController があり、テーブルビューのカテゴリ行をタップして、ストーリーボード ID を使用して別のビュー コントローラをインスタンス化します。

ここで、View Controller ごとに異なるクラスを使用すると、多くの冗長なコードとクラスになります。私がやりたいことは、これらすべてのビュー コントローラーに 1 つのクラスを使用してそれを PrimaryViewController と呼び、MenuViewController でさまざまなカテゴリを選択すると、PrimaryViewController でさまざまなメソッドまたはブロックを呼び出すことです。

PrimaryViewController のメソッドは次のとおりです。

- (void) fetchData:(NSInteger )pageNumber
{        
        channel = [[TheFeedStore sharedStore] fetchWebService:pageNumber withCompletion:^(RSSChannel *obj, NSError *err){

            if (!err) {

                int currentItemCount = [[channel items] count];
                channel = obj;
                int newItemCount = [[channel items] count];

                int itemDelta = newItemCount - currentItemCount;
                if (itemDelta > 0) {
                    NSMutableArray *rows = [NSMutableArray array];

                    for (int i = 0; i < itemDelta; i++) {
                        NSIndexPath *ip = [NSIndexPath indexPathForRow:i inSection:0];
                        [rows addObject:ip];
                    }
                    [[self tableView] insertRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationBottom];
                }
            }
        }];
}

上記のコードには、1 つのカテゴリをロードする機能があります。最初の行「channel = [[TheFeedStore sharedStore] fetchWebService」に注意してください。他のカテゴリは、TheFeedStore という名前の別のクラスで「fetchWebServiceCat2」、「fetchWebServiceCat3」、および「fetchWebServiceCat4」と名付けられています。

私が欲しいのは、別のView ControllerがMenuViewControllerからインスタンス化されたときです。PrimaryViewControllerのfetchDataメソッドを使用して、TheFeedStoreの別のカテゴリメソッドを呼び出す必要があります。

ありがとう!

4

1 に答える 1

2
[store fetchWebService:webService withCompletion:completion];

次と同等です。

[store performSelector:@selector(fetchWebService:withCompletion:)
            withObject:webService
            withObject:completion];

だからあなたはこれを行うことができます:

SEL sel = nil;

if (...) sel = @selector(fetchWebService:withCompletion:);
if (...) sel = @selector(fetchWebServiceCat2:withCompletion:);
...

[store performSelector:sel withObject:webService withObject:^{}];

またはこれでも:

SEL sel = NSSelectorFromString([NSString stringWithFormat:@"fetchWebService%@:withCompletion:", @"Cat2"]);
...
于 2013-05-09T23:33:54.703 に答える