我在我的应用程序中的一个地方,基本上每个ViewController都有一个本地NSManagedObjectContext:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
Run Code Online (Sandbox Code Playgroud)
每个segue都通过同一个setter传递managedObjectContext
[segue.destinationViewController setManagedObjectContext:self.managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
来自Java,可以很容易地创建每个ViewController实现的抽象类.在Objective-c中,似乎没有可能.我要做的是有一个执行此传递的基类,但基本上任何实现UIViewController的都将具有此功能(包括一个简单的UIViewController以及一个UITableViewController).是否有可能/正确创建一个"抽象"类,构成UIViewController这样做?
更新:
的UIViewController + ManagedObjectContext.h
@interface UIViewController (ManagedObjectContext)
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end
Run Code Online (Sandbox Code Playgroud)
的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
Run Code Online (Sandbox Code Playgroud)
你可以只让自己的子类UIViewController,比方说MOCViewController,与managedObjectContext财产.然后使所有其他视图控制器成为子类MOCViewController而不是直接子类化UIViewController.
如果您确实希望使用类别执行此操作,则您的类别可用于objc_setAssociatedObject将托管对象上下文附加到视图控制器.
如果您只有一个托管对象上下文并且只是在任何地方传递它,请考虑将上下文放在应用程序委托的属性中,或者放在全局变量中.
您可以从托管对象获取managedObjectContext,而不是单独传递它.通常,传递托管对象更合乎逻辑.
例如:假设您有一个名为thing的托管对象,您可以通过调用获取managedObjectContext
NSManagedObjectContext *moc=[thing managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
或者,您可以从应用程序委托中获取托管对象上下文:
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *moc = delegate.managedObjectContext;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |