2012-04-18 11 views
9

私はすべてのViewControllerがローカルNSManagedObjectContextあり、基本的に自分のアプリケーション内の場所で午前:iOS Obj-C。正しい解決策を提示していますか?

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext; 

を、すべてのセグエは、Javaから来る同じセッター

[segue.destinationViewController setManagedObjectContext:self.managedObjectContext]; 

経由managedObjectContextを渡し、それは次のようになります各ViewControllerが実装する抽象クラスを簡単に作成できます。 Objective-Cでは、それは可能ではないようです。私は何を探していますと、この受け渡しを行い、基本クラスを持っていますが、基本的には(単なるのUIViewControllerなどのUITableViewControllerを含む)のUIViewControllerがこれを持つことになります実装し何でもあります。それは、これを行う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

私は客観的なcカテゴリーを探しているかもしれないと思います。それらはクラスを拡張するために使用されます。 – Kyle

+2

Objective-C 1.0でポーズを取るクラスは***混乱した***なので、2.0では削除されています。私はそれがiOS NSObjectクラスの一部ではなかったと思います。 – CodaFi

+0

私はiOSの中にクラスのポーズを見たことがないが、私は、ナビゲーションコントローラにUINavigationBarを置き換えるために似た何かを見てきました。 – Kyle

答えて

5

であなただけの、のはMOCViewControllerを言わせて、UIViewControllerの独自のサブクラスを作ることができますmanagedObjectContextプロパティ。次に、あなたの他のビューコントローラのすべてがMOCViewControllerのサブクラスの代わりに、直接UIViewControllerをサブクラス化することにします。

あなたが本当にカテゴリでそれをしたい場合は、お使いのカテゴリは、ビューコントローラに管理オブジェクトコンテキストを添付するobjc_setAssociatedObjectを使用することができます。

あなただけの本当に1つの管理対象オブジェクトコンテキストを持っているし、あなただけのどこにでも周りにそれを渡している、ちょうどあなたのアプリケーションデリゲートのプロパティで、またはグローバル変数にコンテキストを置くことを検討している場合。

+0

これは私の最初のものでしたが、各タイプ、UIViewController、UIListViewControllerなどに1つ必要でした。 – wuntee

+0

私は自分の答えを更新しました。 –

5

あなたは、管理対象オブジェクトからmanagedObjectContextを取得するのではなく、別々にそれを渡すことができます。 一般に、管理対象オブジェクトを渡すのがより論理的です。例えば

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

NSManagedObjectContext *moc=[thing managedObjectContext]; 

を呼び出すことによってmanagedObjectContextを得ることができ、あなたが事と呼ばれる管理対象オブジェクトを持っていると言う:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext *moc = delegate.managedObjectContext; 
+0

これは最適な解決策です。私は、ViewControllerにManagedObjectがない場合を実行していましたが、ナビゲーションへの3ステップのようでした。私はあなたがAppDelegateからコンテキストを取得できるだけであることを認識しませんでした。しかし、この場合でも、それは各クラスの負荷でそれを書かなければならないのはいいです... – wuntee

関連する問題