制作一个跨视图控制器DRY重复的功能

时间:2011-09-11 16:32:47

标签: iphone objective-c ios

我有一个我在视图控制器中使用的功能。放置这个的最佳位置在哪里,我不会在这些控制器上重复这个?

-(void)addNewQuestion
{
    AddNewQuestionViewController *anqvc = [[AddNewQuestionViewController alloc]initWithTopic:self.topic];

    [anqvc setCompletionHandler:^(Question *newQuestion){
        [self.questionTableView reloadData];
    }];

    [self.navigationController pushViewController:anqvc animated:YES];
    [anqvc release];
}

2 个答案:

答案 0 :(得分:1)

如果你有一堆具有相同状态(一个questionTableView)和行为(addNewQuestion)的类,这听起来像是一个很好的时间来为它们所有的继承引入一个公共基类。

答案 1 :(得分:1)

您应该实施observer-pattern

在你的应用程序的某个地方你有模型:你的问题和每个ViewController需要列出所有问题应该在你的模型中观察该列表。如果模型中发生了某些变化:例如添加新问题,将通知所有观察者。

在obj-c中,您可以使用Key-Value-Observing

因此,每个在表格视图中列出数据的VC都可以调用[self.tableView reloadData]

甚至更好:创建一个只实现DataSource的新类,并在所有tableViews中使用相同的DataSource。