코어 데이터의 학습 지원으로 Apple의 CoreDataBooks 샘플 프로젝트를 사용하고 있습니다.Core-Data iPhone : NSManagedObjectModel을 찾을 수 없습니다.
응용 프로그램이로드 될 때 Books 페이지 뷰 (RootViewController)가 아닌 메뉴 페이지가 먼저 표시되도록 응용 프로그램을 수정했습니다.
내가 수행 한 다음
// 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
: 나는 인터페이스 빌더 (그것에 버튼 단지보기)
이
CoreDataBooksAppDelegate.h 지금과 같이 보입니다에서 메뉴 페이지를 만들었
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];
}
CoreDataAppDelegete.m의 나머지 부분은 변경되지 않습니다.
RootViewController *modalViewController1 = [[[RootViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self presentModalViewController:modalViewController1 animated:YES];
는 IB에서 나는 MenuViewController보다는 RootViewController를 호출 MainWindow.xib에 변경 : 버튼을 클릭 할 때 MenuViewController에서
다음 작업이 수행됩니다.그래서 앱이로드되고 버튼이 메뉴에 제대로 표시됩니다. 버튼을 클릭하면 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");
}
을 나는 다음을받을 콘솔에서 :이 예외에 대해 읽었습니다하지만 난 그것을 해결하기 위해 적절한 단계를 모르는
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Book''
.
안녕하세요. 지금까지 시뮬레이터의 콘텐츠 및 설정을 재설정하기까지했습니다. Xcode에서는 캐시를 비우고 모든 대상을 정리했습니다. 오류 : 'NSInternalInconsistencyException', 이유 : '+ entityForName : 엔티티 이름'Book '에 대한 NSManagedObjectModel을 찾을 수 없습니다. 여전히 발생합니다. 도와 줘서 고마워 Tim. – CraigH
디버거에서 프로그램을 단계별로 실행하십시오 - 예외를 얻을 때'managedObjectModel'의 값은 무엇입니까? 'managedObjectContext'? – Tim
안녕하세요. 좋아, 내가 managedObjectModel 보이지 않는 디버거 - 그러나 managedObjectContext에 대한 값이 null입니다 RootViewController viewDidLoad - 잘못된 값이 있어야합니다. 앱의 수정되지 않은 버전에서 managedObjectContext의 값은 viewDidLoad에서 0x3e2ce60입니다. 디버거가 다음 행에서 중지됩니다. NSEntityDescription * entity = [NSEntityDescription entityForName : @ManagedObjectContext : managedObjectContext]의 "Book"; 내부 - (NSFetchedResultsController *) RootViewController의 fetchedResultsController 메소드입니다. – CraigH