0

首先,我对 CoreData 真的很陌生。

现在我创建了一个普通的 CoreData 项目,并将所有代码复制到我想要实现 CoreData 的项目中。

在CoreData-vanilla项目中,第一个viewcontroller(MasterViewController),是处理managedObjectContext的控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    BilderViewController *controller = (BilderViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}

但我希望我的第二个 ViewController 来处理 CoreData:

在此处输入图像描述

正如您在此处看到的,我希望“图片”-Viewcontroller 处理/使用核心数据。每个方法都在那个控制器中,所以它应该可以工作。我已经尝试将方法更改为:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    BilderViewController *controller = [[BilderViewController alloc] init];
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}

但是,我收到错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil 不是搜索实体名称“事件”的合法 NSManagedObjectContext 参数

我的 managedObjectContext 方法:

// Returns the managed object context for the application.
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.

- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}

我怎样才能解决这个问题?

顺便说一句:最终,有人也知道,为什么原型单元不在我的表格视图的顶部。谢谢。

4

2 回答 2

0

在您- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions使用情节提要时,您不需要分配初始化视图控制器。您为其设置上下文的视图控制器不是实际显示的视图控制器,因为它是由情节提要实例化的

要获取从情节提要中实例化的视图控制器,您可以执行以下操作:

UINavigationController *navController = self.window.rootViewController;
MasterViewController *viewController = navController.topViewController;

然后您可以通过以下方式设置上下文:

viewController.managedObjectContext = self.managedObjectContext;

要在第二个视图控制器上设置属性,请在prepareForSegue:第一个视图控制器中执行此操作并获取该segue.destinationViewController属性将成为您的第二个视图控制器,然后您可以从那里设置该视图控制器的 managedObjectContext 属性

于 2013-10-27T01:06:30.440 回答
0

我已经解决了这个问题。我只是将didFinishLaunchingWithOptions方法更改为:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    return YES;
}

然后,我只是managedObjectContext在 Viewcontroller 中调用了我的 AppDelegate 变量,我需要它:

#import "AppDelegate.h"

.

AppDelegate * appdelegate =  [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appdelegate.managedObjectContext;
于 2013-10-27T01:29:14.603 回答