9

私はアプリケーション内で、基本的にすべての ViewController がローカルの NSManagedObjectContext を持っている場所にいます:

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

すべてのセグエは同じセッターを介して managedObjectContext を渡します

[segue.destinationViewController setManagedObjectContext:self.managedObjectContext];

Java から来て、各 ViewController が実装する抽象クラスを作成するのは簡単です。Objective-cでは、それが可能ではないようです。私が探しているのは、この受け渡しを実行する基本クラスを持つことですが、基本的に UIViewController を実装するものはすべてこれを持ちます (プレーンな UIViewController と UITableViewController だけを含む)。これを行う UIViewController を装う「抽象」クラスを作成することは可能/正しいでしょうか?

アップデート:

UIViewController+ManagedObjectContext.h

@interface UIViewController (ManagedObjectContext)
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end

UIViewController+ManagedObjectContext.m

#import "UIViewController+ManagedObjectContext.h"
@implementation UIViewController (ManagedObjectContext){
    NSManagedObjectContext *context;    // This is not valid, cant have local variables
}
@synthesize managedObjectContext; // This is not valid, must be @dynamic
-(void)setManagedObjectContext:(NSManagedObjectContext *)context{
    //How do you have a local NSManagedObjectContext?
}
@end
4

2 に答える 2

5

プロパティを使用して、UIViewControllerたとえば の独自のサブクラスを作成できます。次に、他のすべてのView Controllerを、直接サブクラス化するのではなく、のサブクラスにします。MOCViewControllermanagedObjectContextMOCViewControllerUIViewController

本当にカテゴリを使用したい場合は、カテゴリを使用objc_setAssociatedObjectして管理対象オブジェクト コンテキストをビュー コントローラにアタッチできます。

マネージド オブジェクト コンテキストが 1 つしかなく、それをどこにでも渡すだけの場合は、アプリケーション デリゲートのプロパティまたはグローバル変数にコンテキストを配置することを検討してください。

于 2012-04-18T01:52:47.473 に答える
5

個別に渡すのではなく、管理対象オブジェクトから managedObjectContext を取得できます。一般に、管理対象オブジェクトを渡す方がより論理的です。

たとえば、thing という管理対象オブジェクトがあるとします。

NSManagedObjectContext *moc=[thing managedObjectContext];

または、アプリケーション デリゲートから管理オブジェクト コンテキストを取得することもできます。

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = delegate.managedObjectContext;
于 2012-04-18T02:04:09.723 に答える