首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CoreData UITableViewController managedObjectContext错误

CoreData UITableViewController managedObjectContext错误
EN

Stack Overflow用户
提问于 2011-12-08 23:28:21
回答 4查看 5.3K关注 0票数 4

我已经开始使用CoreData,并使用CoreData进行一个新项目,并将这些基础构建到我自己的项目中。我已经到达了一个阶段,我或多或少地复制了fresh项目,但是我得到了一个错误。

这一行,controller.managedObjectContext = self.managedObjectContext;给我带来了问题。当我注释掉它时,应用程序只是启动一个空白的UITableView,但是如果我包括这一行,它会导致以下错误:

代码语言:javascript
复制
Universal[24718:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewController setManagedObjectContext:]: unrecognized selector sent to instance 0x1521a0'
*** First throw call stack:
(0x344558bf 0x346a51e5 0x34458acb 0x34457945 0x343b2680 0x2413 0x378367eb 0x378303bd 0x377fe921 0x377fe3bf 0x377fdd2d 0x30c30df3 0x34429553 0x344294f5 0x34428343 0x343ab4dd 0x343ab3a5 0x3782f457 0x3782c743 0x2331 0x22c8)
terminate called throwing an exception

如果你需要更多的代码看,我可以提供它,我希望你有一个想法发生了什么。我看不到任何会导致这种情况的东西,我没有得到任何错误,但我得到了这个日志,因为这一行导致整个应用程序崩溃。

这行代码驻留在应用程序委托的didFinishLaunchingWithOptions方法中,就像在一个新的核心数据项目中一样。

根据请求,表视图控制器的头文件:

代码语言:javascript
复制
#import <UIKit/UIKit.h>

#import <CoreData/CoreData.h>

@interface myTableViewController : UITableViewController <NSFetchedResultsControllerDelegate>

@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@end
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-07 22:32:17

出现此错误的原因是在AppDelegate.m中

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
    MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
    controller.managedObjectContext = self.managedObjectContext;
    return YES;
}

当使用默认的CoreData模板时,托管对象上下文被分配给topViewController,它不再是MasterViewController,因为您已经插入了一个不同的视图作为起点。因此,无法识别的选择器被发送到实例。

您有两个选择:

1)删除分配托管对象上下文的代码,在需要它的视图中,如下所示

代码语言:javascript
复制
 [[[UIApplication sharedApplication] delegate] mainManagedObjectContext];

2)保留代码(更正类名),添加managedObjectContext声明,并在所有UIViewControllers之间的所有应用程序中传递NSManagedObjectContext对象

票数 6
EN

Stack Overflow用户

发布于 2011-12-08 23:52:15

您缺少一些将UIViewController(或其子类)连接到NSFetchedResultsController的连接。当您设置一个启用了核心数据的新项目时,您可以免费获得它,但如果您要将核心数据添加到现有项目中,您需要自己连接一些东西。

欲了解更多信息,请访问http://wiresareobsolete.com/wordpress/2009/12/adding-core-data-existing-iphone-projects/

票数 2
EN

Stack Overflow用户

发布于 2012-11-06 01:26:10

这取决于您的应用程序是如何构建的。如果您在所有代码前面使用TabBarViewController,则会略有不同

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    UITabBarController *tabController = (UITabBarController *)self.window.rootViewController;

    UINavigationController *navigationController = (UINavigationController *)[[tabController viewControllers] objectAtIndex:0];
    MasterViewController *controller = (MasterViewController *)[[navigationController viewControllers] objectAtIndex:0];
    controller.managedObjectContext = self.managedObjectContext;

    return YES;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8433359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档