1

MVCに関して非常に一般的な質問があります。タブバーコントローラーを使用して、Webサービスからのさまざまな種類のデータを表示するアプリがあります。

データのフェッチやプレゼンテーション用の変更など、すべての汚い作業を行う「モデル」クラスがありますが、各MVCでそのクラスをインスタンス化しています。そして、ここで問題が発生します。たとえば、アプリの2つのタブは[販売]と[コメント]です。アプリが起動したら、Salesを取得して表示し、コメントを取得して、新しいコメントがある場合は[コメント]タブにバッジを付けます。

そのフェッチプロセスには、Webサービスからのデータのプル、コアデータへの保存、キャッシュからのプル、比較などが含まれます。ユーザーが[コメント]をタップすると見苦しくなりますが、[販売]タブでフェッチしています(そのバッジのみ) )。そして、Commentsが出てきたとき、Sales MVCは死んでいて、それが台無しになるのを防ぐために何も言えません。

私の質問は、どうすれば「脳」クラスをMVCから独立させることができるかということです。つまり、MVCごとに頭脳を持たせたくない(意味がありません)が、すべてのMVCに1つだけで、委任を使用してデータやバッジなどをプッシュするということですか?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 に答える