简体   繁体   English

从视图控制器传递后,传递的管理对象上下文为null

[英]passed managed object context is null after passing from view controller

I'm trying to do a simple core data app. 我正在尝试做一个简单的核心数据应用程序。 I have the following code in the app delegate: 我在应用程序委托中有以下代码:

#import <UIKit/UIKit.h>

@interface HEFTAppDelegate : UIResponder <UIApplicationDelegate>{

}


@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;


@end

Then in the implementation 然后在执行中

#import "HEFTAppDelegate.h"
#import "HEFTMasterViewController.h"
#import "HEFTTestdatabaseMasterViewController.h"
#import "HEFTData_Manager.h"

@implementation HEFTAppDelegate

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {

        //ipad init

    } else {
        HEFTTestdatabaseMasterViewController *testDatabaseMasterViewController = [[HEFTTestdatabaseMasterViewController alloc]initWithStyle:UITableViewStylePlain];
        HEFTData_Manager *dataManager = [[HEFTData_Manager alloc]init];

        self.managedObjectContext = [dataManager mainObjectContext];

        // Pass the managed object context to the view controller.

        testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;


    }
    return YES;
}

The HEFTData_Manager class sets up the context etc HEFTData_Manager类设置上下文等

Looking at the debugger the context appears to get set correctly in the app delegate and when the 查看调试器,上下文似乎在应用程序委托中正确设置,并且当

testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;

Message is issued. 消息已发出。

However when the table view appears the HEFTTestdatabaseMasterViewController managedObjectContext is NULL 但是,当表视图出现时,HEFTTestdatabaseMasterViewControllermanagedObjectContext为NULL

Any ideas on whats happening and pointers would be gratefully received. 关于所发生的事情和指针的任何想法将不胜感激。

Debugger output 调试器输出

At: 在:

testDatabaseMasterViewController.managedObjectContext = self.managedObjectContext ;

testDatabaseMasterViewController    HEFTTestdatabaseMasterViewController
*   0x06d74b50 UITableViewController    UITableViewController    managedObjectContext   NSManagedObjectContext *    0x06d778e0
fetchedResultsController    NSFetchedResultsController *    0x00000000

At: 在:

- (void)viewDidLoad
{
    [super viewDidLoad];

   // NSManagedObjectContext *context = self.managedObjectContext;

    NSLog(@"context : %@",self.managedObjectContext);

    self.navigationItem.leftBarButtonItem = self.editButtonItem;

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)];
    self.navigationItem.rightBarButtonItem = addButton;

}

self HEFTTestdatabaseMasterViewController *const 0x06d705a0 UITableViewController UITableViewController 自我HEFTTestdatabaseMasterViewController * const 0x06d705a0 UITableViewController UITableViewController
UIViewController UIViewController UIViewController UIViewController
_tableViewStyle UITableViewStyle UITableViewStylePlain _keyboardSupport id 0x00000000 _staticDataSource id 0x00000000 _tableViewControllerFlags managedObjectContext NSManagedObjectContext * 0x00000000 fetchedResultsController NSFetchedResultsController * 0x00000000 _tableViewStyle UITableViewStyle UITableViewStylePlain _keyboardSupport id 0x00000000 _staticDataSource id 0x00000000 _tableViewControllerFlagsmanagedObjectContext NSManagedObjectContext * 0x00000000 fetchedResultsController NSFetchedResultsController * 0x00000000

您应该分配您managedObjectContext属性里面viewDidLoad的方法HEFTTestdatabaseMasterViewController类,或者如果是,你不应该简单地编辑继承它,并把它在一个库文件viewDidLoad的自定义类。

Added: 添加:

id appDelegate = (id)[[UIApplication sharedApplication] delegate]; id appDelegate =(id)[[UIApplication sharedApplication]委托]; self.managedObjectContext = [appDelegate managedObjectContext]; self.managedObjectContext = [appDelegatemanagedObjectContext];

To the viewDidLoad method of the HEFTTestDatabaseMasterVIewController 到HEFTTestDatabaseMasterVIewController的viewDidLoad方法

Worked and will also work in other classes that need access to the managedObjectContext 工作,也将在需要访问managedObjectContext的其他类中工作

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM