您好,我正在尝试设置我的 UIViewController
托管对象上下文,但对象上下文未保存。代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil];
my_TableViewController *viewController = [mainStoryboard instantiateViewControllerWithIdentifier:@"coretut"];
if ([viewController isKindOfClass:[my_TableViewController class]]) {
[viewController setOManagedObjectContext:self.managedObjectContext];
}
NSLog(@"%@", self.managedObjectContext);
NSLog(@"%@", viewController.oManagedObjectContext);
}
下面的输出是
Apple_Tutorial[11241:461826] <NSManagedObjectContext: 0x7fb558d86600>
Apple_Tutorial[11241:461826] <NSManagedObjectContext: 0x7fb558d86600>
但是当我打电话时
NSLog(@"%@", self.oManagedObjectContext);
在 my_TableViewController
的 viewDidLoad
() 中,输出为 null
。 oManagedObjectContext 声明为(强,非原子)
。有谁知道为什么 oManagedObjectContext 变为 null?
viewDidLoad代码:
- (void)viewDidLoad {
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"my_TableViewCell" bundle:nil];
[[self tableView] registerNib:nib forCellReuseIdentifier:@"tableViewCell"];
NSLog(@"%@", self.oManagedObjectContext);
}
最佳答案
问题是 didFinishLaunchingWithOptions
正在实例化一个新的 View Controller ,然后对其不执行任何操作(即丢弃它)。所以您正在查看两个不同的 View Controller 实例。
您可能让应用程序委托(delegate)设置 Root View Controller 的 oManagedObjectContext
:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
ViewController *controller = (id)self.window.rootViewController;
NSAssert([controller isKindOfClass:[ViewController class]], @"Root controller should be `ViewController`, but is %@", controller);
controller.oManagedObjectContext = self.managedObjectContext;
return YES;
}
显然,如果您的 View Controller 不是根 Controller (例如,如果它位于某些容器 View Controller 中,例如导航 Controller 、选项卡栏 Controller 、自定义容器 Controller 等),那么您必须进行调整上面的代码用于浏览该层次结构以找到您的 View Controller 类。
关于ios - Objective C View Controller 属性未保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31065866/