文字很复杂但是lemme试一试。我有一个MenuViewController,它有一个带有类别名称的数组,点击tableview中的类别行,使用Storyboard ID实例化一个不同的视图控制器。
现在,如果我为每个视图控制器使用不同的类,那将是许多冗余的代码和类。我想要做的是为所有这些视图控制器使用一个类,让我们称之为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];
}
}
}];
}
上述代码可以加载一个类别。请注意第一行“channel = [[TheFeedStore sharedStore] fetchWebService ”,其他类别在另一个名为TheFeedStore的类中命名为“fetchWebServiceCat2”,“fetchWebServiceCat3”和“fetchWebServiceCat4”。
我想要的是当从MenuViewController实例化不同的视图控制器时,它应该使用PrimaryViewController的fetchData方法来调用TheFeedStore的不同类别方法。
谢谢!
答案 0 :(得分: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"]);
...