Objective C查看控制器属性不保存

时间:2015-06-26 05:53:15

标签: ios objective-c xcode core-data properties

您好我正在尝试设置我的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的{​​{1}}()中,输出为my_TableViewController。 oManagedObjectContext声明为null。有谁知道为什么oManagedObjectContext变为null?

viewDidLoad代码:

(strong, nonatomic)

1 个答案:

答案 0 :(得分:2)

问题是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;
}

显然,如果您的视图控制器不是根控制器(例如,如果它位于某个容器视图控制器中,例如导航控制器,标签栏控制器,自定义容器控制器等),那么您必须进行调整上面的代码用于浏览该层次结构以查找您的视图控制器类。