Ios 无法将NSManagedObjectContext传递给我的视图控制器

Ios 无法将NSManagedObjectContext传递给我的视图控制器,ios,cocoa-touch,ios5,nsmanagedobjectcontext,Ios,Cocoa Touch,Ios5,Nsmanagedobjectcontext,好吧,我在这里可能有点不知所措,但我怀疑我遗漏了一些非常基本的东西。我已经在stack和其他论坛上搜索了关于找到解决方案的帮助。我已经尝试了我找到的所有解决方案,但都不适合我的情况,我看不出我缺少什么 我已经创建了一个CoreData应用程序。在我的appDelegate中使用NSManagedObjectContext将数据读写到CoreData存储时,所有这些都可以正常工作。我已经检查了NSManagedObjectContext是否已在我的AppDelegate中设置,并且已设置。在将它传

好吧,我在这里可能有点不知所措,但我怀疑我遗漏了一些非常基本的东西。我已经在stack和其他论坛上搜索了关于找到解决方案的帮助。我已经尝试了我找到的所有解决方案,但都不适合我的情况,我看不出我缺少什么

我已经创建了一个CoreData应用程序。在我的appDelegate中使用NSManagedObjectContext将数据读写到CoreData存储时,所有这些都可以正常工作。我已经检查了NSManagedObjectContext是否已在我的AppDelegate中设置,并且已设置。在将它传递给我唯一的viewController之后,我检查它是否已设置。这显然是我的问题。我什么都试过了,想不出解决办法,现在累了,想睡觉了。我对iOS很陌生,所以我相信这是一个基本的东西

这是我的代码

AppDelegate.m

#import "AppDelegate.h"
#import "ViewController.h"
#import "Recipe.h"

@interface AppDelegate()

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, strong) ViewController *viewController;
@end

@implementation AppDelegate 

@synthesize managedObjectModel, managedObjectContext, persistentStoreCoordinator, viewController;

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {

    NSManagedObjectContext *context = [self managedObjectContext];
    if (!context) {
        NSLog(@"There is an error!!!");
    }

    if (context == nil) {
        NSLog(@"Context is nil in appdelegate");
    } 
    else {
    NSLog(@"Context is set in appdelegate"); 
    }

    viewController.managedObjectContext = self.managedObjectContext;

    // Override point for customization after application launch.
    return YES;
}

#pragma mark - Core Data

- (NSManagedObjectModel *)managedObjectModel
{
    if (managedObjectModel == nil) {
        NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"RecipeBook" ofType:@"momd"];
        NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
        managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    }
    return managedObjectModel;
}

- (NSString *)documentsDirectory
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return documentsDirectory;
}

- (NSString *)dataStorePath
{
    return [[self documentsDirectory] stringByAppendingPathComponent:@"DataStore.sqlite"];
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (persistentStoreCoordinator == nil) {
        NSURL *storeURL = [NSURL fileURLWithPath:[self dataStorePath]];

        persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

        NSError *error;
        if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
            NSLog(@"Error adding persistent store %@, %@", error, [error userInfo]);
            abort();
        }
    }
    return persistentStoreCoordinator;
}

- (NSManagedObjectContext *)managedObjectContext
{
    if (managedObjectContext == nil) {
        NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;
        if (coordinator != nil) {
            managedObjectContext = [[NSManagedObjectContext alloc] init];
            [managedObjectContext setPersistentStoreCoordinator:coordinator];
        }
    }
    return managedObjectContext;
}
@end
ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UITableViewController {
NSArray *recipes;
NSManagedObjectContext *managedObjectContext;
}

@property (nonatomic, retain) NSArray *recipes;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@end
我知道我的ViewController中的NSManagedObjectContext为零。问题是如何将上下文从AppDelegate传递到ViewController?我不想每次想查询CoreData时都要从我的ViewController(希望会添加更多)中询问AppDelegate,我希望传递managedObjectContext


我希望这一切都是有道理的

我已经找到了问题的答案。managedObjectContext未正确传递到我的viewController

我使用的是:

viewController.managedObjectContext = self.managedObjectContext;
当我应该使用:

ViewController *viewController = (ViewController *)self.window.rootViewController;
viewController.managedObjectContext = self.managedObjectContext;

感谢用户523234为我提供了正确的答案。

我已经找到了问题的答案。managedObjectContext未正确传递到我的viewController

我使用的是:

viewController.managedObjectContext = self.managedObjectContext;
当我应该使用:

ViewController *viewController = (ViewController *)self.window.rootViewController;
viewController.managedObjectContext = self.managedObjectContext;

感谢user523234让我站在正确的位置。

可能将此提交给codereview.stackexchange.comI没有看到您实例化viewController实例?可能将此提交给codereview.stackexchange.comI没有看到您实例化viewController实例?