2013-05-09 4 views
1

Сложность написания слов, но дайте им попробовать. У меня есть MenuViewController, у которого есть массив с именами категорий, нажав на строки категорий в tableview, создайте другой контроллер представления, используя идентификатор раскадровки.Вызов различного метода в зависимости от выбранного контроллера просмотра

Теперь, если я использую разные классы для каждого контроллера вида, это будет много избыточного кода и классов. Что я хочу сделать, так это использовать один класс для всех этих контроллеров представлений, чтобы вызвать его 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», остальные категории называются «fetchWebServiceCat2», «fetchWebServiceCat3» и «fetchWebServiceCat4» в другом классе с именем TheFeedStore.

То, что я хочу, - это когда другой контроллер представлений создается из MenuViewController, он должен использовать метод fetchData PrimaryViewController для вызова другого метода категории TheFeedStore.

Спасибо!

ответ

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"]); 
... 
+0

им не в состоянии понять, как ваш код может быть интегрирован в мой проект – AJ112

Смежные вопросы