【问题标题】:Call Different Method Depending On The View Controller Selected根据选择的视图控制器调用不同的方法
【发布时间】:2013-05-09 23:24:44
【问题描述】:

说起来很复杂,但请试一试。我有一个带有类别名称的数组的 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 的不同类别方法。

谢谢!

【问题讨论】:

    标签: ios objective-c xcode uiviewcontroller storyboard


    【解决方案1】:
    [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"]);
    ...
    

    【讨论】:

    • 我无法理解如何将您的代码集成到我的项目中
    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    相关资源
    最近更新 更多