OGeek|极客世界-中国程序员成长平台

标题: ios - Objective-C View Controller 属性未保存 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:39
标题: ios - Objective-C View Controller 属性未保存

您好,我正在尝试设置我的 UIViewController's 托管对象上下文,但对象上下文未保存。代码如下:

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)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_TableViewControllerviewDidLoad() 中,输出为 null。 oManagedObjectContext 被声明为 (strong, nonatomic)。有谁知道为什么 oManagedObjectContext 变为空?

viewDidLoad 代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    UINib *nib = [UINib nibWithNibName"my_TableViewCell" bundle:nil];
    [[self tableView] registerNib:nib forCellReuseIdentifier"tableViewCell"];

    NSLog(@"%@", self.oManagedObjectContext);
}



Best Answer-推荐答案


问题是 didFinishLaunchingWithOptions 正在实例化一个新的 View Controller ,然后什么都不做(即丢弃它)。因此,您正在查看两个不同的 View Controller 实例。


您可以让应用委托(delegate)设置 Root View Controller 的 oManagedObjectContext:

- (BOOL)applicationUIApplication *)application didFinishLaunchingWithOptionsNSDictionary *)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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4