0

現在、CoreData モデルとの相互作用を伴う、必要な特別な機能を処理する目的の C クラス ( NSObject) を作成しました。CoreData と対話するこれらの関数は、dbInterface.h および dbInterface.m ファイルにあります。dbInterface クラスに conform を追加しました<NSFetchedResultsControllerDelegate>

@interface dbInterface : NSObject<NSFetchedResultsControllerDelegate>{
    NSFetchedResultsController *fetchedResultsController;
    NSManagedObjectContext *managedObjectContext;
}

アプリ デリゲートでは、このクラスのインスタンスを作成し、デリゲート マネージド コンテキストを dbInterface オブジェクト マネージド コンテキストに接続しました。

appDelegate.h:

@property (nonatomic, retain) IBOutlet dbInterface *dbConnector;

appDelegate.m:

@synthesize dbConnector;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    dbConnector.managedObjectContext=self.managedObjectContext;
    return YES;
}

質問: ビュー コントローラー自体のデータを収集するために、この dbInterface オブジェクトとやり取りする必要がある 6 つのビュー コントローラーがあります。したがって、このセットアップでは、dbInterface が viewController と CoreData モデルの仲介者として機能しています。これは、仲介者である dbInterface クラスで定義したこれらの特定の操作を実行する正しい方法ですか?

それが正しい方法ではない場合、View ControllerのためにCoreDataモデルと対話するにはどうすればよいですか?

それが正しい場合、アプリデリゲートで宣言したオブジェクトにアクセスするにはどうすればよいdbConnectorですか? 明らかに、dbInterface クラスの 6 つのコピーを作成したくありません。これには、メモリを使いすぎて、この行の 6 つのコピーも書き込まなければならないという問題があります。

dbConnector.managedObjectContext=self.managedObjectContext;

シングルトンバンディという言葉を聞いたことがありますが、これでいいのでしょうか?

4

1 に答える 1

1

アプリのデリゲートからクラスのインスタンスを参照できるはずです。別のクラスからアプリ デリゲートを参照するために使用するコードを次に示します。クラスプレフィックスを使用するものに変更する必要があります。

#import "NXAppDelegate.h"
NXAppDelegate *appDelegate = (NXAppDelegate *)[[UIApplication sharedApplication] delegate];

dbConnector をプロパティとして使用しているため、アプリ デリゲートから参照できます (以下の例)。

viewController.managedObjectContext = appDelegate.dbConnector.managedObjectContext;

シングルトンを使用することは、iOS 開発では少し嫌われます。過度に使用されたり、実際に必要なく使用されたりする傾向があります。条件を評価し、デリゲート、プロトコル、またはサブクラス化を使用してニーズを達成できない場合は、シングルトンを使用することをお勧めします。

トピックについて読みたい場合は、Apple がシングルトンの適切な使用法を説明するためにドキュメントを更新したようです。

http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html

また、シングルトンの長所と短所について話しているオンラインの記事がたくさんあります。

http://jason.agostoni.net/2012/01/22/ios-best-practices-singletons/

于 2013-02-07T19:52:08.113 に答える