1

我有一个关于 MVC 的非常普遍的问题。我有一个应用程序,它使用标签栏控制器来显示来自网络服务的不同类型的数据。

我有一个“模型”类,它完成所有脏活,比如获取数据并修改它以进行演示,但我在每个 MVC 中都实例化了该类。这就是问题所在。例如,应用程序的两个选项卡是销售和评论。当应用程序启动时,我希望它获取并显示销售,如果有新评论,还获取评论并在评论选项卡上放置一个徽章。

该获取过程涉及从 Web 服务中提取数据、将其存储到核心数据、从缓存中提取、比较等。当用户点击评论时,它会变得很难看,但他们仍在“销售”选项卡中获取数据(仅用于该徽章)。当评论出现时,Sales MVC 已经死了,我不能告诉它任何事情来防止它搞砸。

我的问题是,如何使“大脑”类独立于 MVC?这意味着我不想为每个 MVC 拥有一个大脑(这没有任何意义),但对所有 MVC 只拥有一个大脑并使用委托来推送数据和徽章之类的东西?我曾考虑将 UITabBarController 子类化并将大脑类放在那里,但我不确定这样做是否是一个好习惯。

有什么想法吗?

4

1 回答 1

1

子类化绝对没有问题UITabBarController。继续并在那里放置获取逻辑。获取后,您可以更新选项卡控制器和选项卡徽章。

PS 在我的应用程序中,我只是简单地将逻辑放在第一个选项卡控制器中,然后更新其他访问它的选项卡控制器,例如self.tabBarController.tabBar.items[1].

此外,我添加到除第一个以外的选项卡控制器:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(contextDidChange:)
                                             name:NSManagedObjectContextObjectsDidChangeNotification
                                           object:self.managedObjectContext];

并寻找核心数据变化:

- (void)contextDidChange:(NSNotification *)notification
{
    dispatch_async(dispatch_get_main_queue(), ^{

        NSLog(@"%s",__PRETTY_FUNCTION__);

        assert([NSManagedObjectContextObjectsDidChangeNotification isEqual:notification.name]);
        for (NSManagedObject *mo in [notification.userInfo objectForKey:NSUpdatedObjectsKey])
        {
            if ([mo isKindOfClass:[Place class]]) {
         ...
        }
}
于 2013-01-26T19:36:33.910 回答