Cra*_*igH 35 iphone core-data objective-c
我正在使用Apple的CoreDataBooks示例项目作为核心数据的学习辅助工具.
我修改了应用程序,以便在应用程序加载时首先显示菜单页面 - 而不是Books tableview(RootViewController).
我做了以下事情:
我在界面构建器中创建了一个菜单页面(只是一个带有按钮的视图)
CoreDataBooksAppDelegate.h现在看起来像这样:
// for the menu
@class MenuViewController;
@interface CoreDataBooksAppDelegate : NSObject <UIApplicationDelegate> {
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
UIWindow *window;
UINavigationController *navigationController;
//for the menu
MenuViewController *viewController;
}
- (IBAction)saveAction:sender;
//for the menu
@property (nonatomic, retain) IBOutlet MenuViewController *viewController;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
Run Code Online (Sandbox Code Playgroud)
CoreDataBooksAppDelegate.m如下所示:
#import "CoreDataBooksAppDelegate.h"
#import "RootViewController.h"
// for the menu
#import "MenuViewController.h"
@implementation CoreDataBooksAppDelegate
@synthesize window;
@synthesize navigationController;
// for the menu
@synthesize viewController;
#pragma mark -
#pragma mark Application lifecycle
- (void)applicationDidFinishLaunching:(UIApplication *)application {
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
// for the menu
[window addSubview:viewController.view];
// Configure and show the window
[window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)
CoreDataAppDelegete.m的其余部分保持不变.
单击按钮时,在MenuViewController中,将执行以下操作:
RootViewController *modalViewController1 = [[[RootViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self presentModalViewController:modalViewController1 animated:YES];
Run Code Online (Sandbox Code Playgroud)
在IB中,我更改了MainWindow.xib以调用MenuViewController而不是RootViewController.
因此,应用程序加载并使用按钮正确显示菜单.单击该按钮后,应用程序在RootViewController的viewDidLoad内部崩溃.
它在这里崩溃:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"1 START viewDidLoad RootViewController");
self.title = @"Books";
// Set up the edit and add buttons.
self.navigationItem.leftBarButtonItem = self.editButtonItem;
NSLog(@"2 setup button viewDidLoad RootViewController");
// Configure the add button.
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addBook)];
self.navigationItem.rightBarButtonItem = addButton;
[addButton release];
NSLog(@"3 viewDidLoad RootViewController");
NSError *error;
// HERE IS THE CRASH SITE
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Does not reach this point in viewDidLoad RootViewController");
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort(); // Fail
}
NSLog(@"END viewDidLoad RootViewController");
}
Run Code Online (Sandbox Code Playgroud)
在控制台中,我收到以下内容:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Book''
Run Code Online (Sandbox Code Playgroud)
我已阅读有关此异常的信息,但我不知道解决此问题的正确步骤.
Cra*_*igH 87
好.
将以下代码放在RootViewController的viewDidLoad中可以消除错误:
if (managedObjectContext == nil)
{
managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSLog(@"After managedObjectContext: %@", managedObjectContext);
}
Run Code Online (Sandbox Code Playgroud)
我在SO上发现了一个有类似问题的人:链接文字
正如Aryeh在那篇文章中所指出的那样:"简而言之,你正在尝试从尚未设置的objectContext中获取实体.因此,您的选项是在此视图加载之前将其设置为正确或在应用程序中的其他位置".
| 归档时间: |
|
| 查看次数: |
38148 次 |
| 最近记录: |