Objective C 视图控制器 属性 未保存

Objective C view controller property not saving

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

- (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);

viewDidLoad() 中,对于 my_TableViewController,输出是 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);
}

问题是 didFinishLaunchingWithOptions 正在实例化一个新的视图控制器,然后什么都不做(即丢弃它)。所以您正在查看两个不同的视图控制器实例。


您可以让应用委托设置根视图控制器的 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;
}

显然,如果您的视图控制器不是根控制器(例如,如果它在某些容器视图控制器中,例如导航控制器、选项卡栏控制器、自定义容器控制器等),那么您将拥有调整上面的代码以浏览该层次结构以找到您的视图控制器 class.