0

これはばかげた質問だと思いますが、残念ながら私は多くの人と同じように初心者です (まあ、今はそうではないかもしれませんが...)。

いずれかの方法...

独自のクラス (MyListTableViewController) を介して入力される UITableView を含む既存のプロジェクトがあります。このクラスは現在、NSFetchedResultsController を本質的に設定するオブジェクトをサブクラス化しています。

この事実を考慮すると、私が読んだ例とドキュメントは、基本的にすべての中心にある UIViewController をサブクラス化するため、QuickDialog 機能にアクセスするために QuickDialogController をサブクラス化する必要があることを常に示しています..

問題は、同じ UITableView/Instance に対して QuickDialogController と NSFetchedResultsController クラスの両方を一緒に使用できるようにする方法がわからないことです...

NSFetchedResultsController は、UITableView へのデリゲートとして機能し、すべての UITableView イベントなどを監視するため、サブクラス化されています。など...ほとんどの人がよく知っていると確信していること...問題は、 QuickDialogController は、基本的に UIView へのデリゲートとしても機能したいと考えています (UITableView は既にサブクラス化されています)。

ですから、これら 2 つのオブジェクトを同じコレクション内でうまく連携させる方法を理解しようとしているので、爆発しそうな気がします...

私のアプリはコア データと密接に結合されているため、この機能が必要ですが、QuickDialog のパワーと美しさも必要です。

では、QuickDialogController をサブクラス化し、NSFetchedResultsController を一種のデリゲートとして使用する方法、またはその逆の方法はありますか?

繰り返しますが、これがばかげた/初心者の質問である場合は申し訳ありません...まだ学習中ですが、これを正しく行いたいです...

例 (現在) UITableViewController に使用しているサブクラス レイアウト...

MyListTableViewController.h

#import <UIKit/UIKit.h>
#import "CoreDataTableViewController.h"

@interface MyListTableViewController : CoreDataTableViewController

CoreDataTableViewController.h

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

@interface CoreDataTableViewController : UITableViewController <NSFetchedResultsControllerDelegate>

@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic) BOOL suspendAutomaticTrackingOfChangesInManagedObjectContext;

-(void)performFetch;
@end

ここでの別の質問は次のようになります。QuickDialogController をサブクラス化することなく、QuickDialog 操作を利用することは可能ですか。もしそうなら-これを行うことの意味は何ですか?(最も重要なことに)小さな例はありますか? 2つのうちの1つの割り当てられたインスタンスを作成するだけですか?

私の質問が暴露する可能性のある無知を前もってお詫び申し上げます....

4

1 に答える 1

1

あなたがやろうとしていることは不可能です。ObjC では、多重継承が許可されていません。これは、あなたがやろうとしていることです。たとえそうであったとしても、コア データの dataSource/delegate と QuickDialog の datasource/delegate が同時に動作しているという問題が残るでしょう。

いずれかの方法で決定する必要があります: 1 - QuickDialog コントローラーから継承し、CoreData からデータをフェッチしてルート要素に自分でロードするロジックを追加する (CoreDataTableViewController を使用しない) または.. 2 - CoreDataTableViewController から継承する、手動で QuickDialogTableView を作成し、それはクラスのデータソース/デリゲートです。

#2に関しては、QDはこの種の使用法のために作成されていません.IMHO. オプション 1 を使用して、CoreData データの読み込みを外部クラスに移動し、それをルート要素に読み込むことができます。ただし、数百/数千の行がある場合、これには QD を使用しません。

于 2012-10-13T17:39:00.107 に答える