我已经开始使用CoreData,并使用CoreData进行一个新项目,并将这些基础构建到我自己的项目中。我已经到达了一个阶段,我或多或少地复制了fresh项目,但是我得到了一个错误。
这一行,controller.managedObjectContext = self.managedObjectContext;给我带来了问题。当我注释掉它时,应用程序只是启动一个空白的UITableView,但是如果我包括这一行,它会导致以下错误:
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方法中,就像在一个新的核心数据项目中一样。
根据请求,表视图控制器的头文件:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface myTableViewController : UITableViewController <NSFetchedResultsControllerDelegate>
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end发布于 2012-01-07 22:32:17
出现此错误的原因是在AppDelegate.m中
- (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)删除分配托管对象上下文的代码,在需要它的视图中,如下所示
[[[UIApplication sharedApplication] delegate] mainManagedObjectContext];2)保留代码(更正类名),添加managedObjectContext声明,并在所有UIViewControllers之间的所有应用程序中传递NSManagedObjectContext对象
发布于 2011-12-08 23:52:15
您缺少一些将UIViewController(或其子类)连接到NSFetchedResultsController的连接。当您设置一个启用了核心数据的新项目时,您可以免费获得它,但如果您要将核心数据添加到现有项目中,您需要自己连接一些东西。
欲了解更多信息,请访问http://wiresareobsolete.com/wordpress/2009/12/adding-core-data-existing-iphone-projects/
发布于 2012-11-06 01:26:10
这取决于您的应用程序是如何构建的。如果您在所有代码前面使用TabBarViewController,则会略有不同
- (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;
}https://stackoverflow.com/questions/8433359
复制相似问题