का पता नहीं लगा सका मैं कोर डेटा के लिए सीखने की सहायता के रूप में ऐप्पल के CoreDataBooks नमूना प्रोजेक्ट का उपयोग कर रहा हूं।कोर-डेटा आईफोन: NSManagedObjectModel
मैंने ऐप को संशोधित किया ताकि जब ऐप लोड हो जाए तो मैं पहले मेनू पेज दिखाता हूं - पुस्तकें टेबलव्यू (रूटव्यू कंट्रोलर) नहीं।
मैंने किया है निम्नलिखित:
मैं इंटरफ़ेस बिल्डर (बस उस पर एक बटन के साथ एक दृश्य)
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
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 अपरिवर्तित बनी हुई है।
MenuViewController में बटन क्लिक होने, निम्नलिखित कार्रवाई होती है:
RootViewController *modalViewController1 = [[[RootViewController alloc] initWithNibName:nil bundle:nil] autorelease];
[self presentModalViewController:modalViewController1 animated:YES];
आईबी में मैं MenuViewController बजाय RootViewController कॉल करने के लिए MainWindow.xib बदल दिया है।
तो, ऐप लोड और मेनू बटन के साथ ठीक से प्रदर्शित होता है। बटन क्लिक करने पर एप्लिकेशन रूटव्यू कंट्रोलर के दृश्यडिडलोड के अंदर क्रैश हो जाता है।
यह यहीं दुर्घटनाओं:
- (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''
मैं इस अपवाद के बारे में पढ़ा है लेकिन मैं इसे हल करने के लिए उचित कदम नहीं जानता।
हाय। मैं सिम्युलेटर पर सामग्री और सेटिंग्स को रीसेट करने के लिए अब तक चला गया। एक्सकोड में मैंने कैश खाली कर दिया और सभी लक्ष्यों को साफ किया। त्रुटि: 'एनएसआईएननल इन्कॉन्सिस्टेंसी एक्सेप्शन', कारण: '+ entityForName: इकाई नाम' बुक '' के लिए एनएसएमएनेज्ड ऑब्जेक्ट मॉडल का पता नहीं लगा सका। आपकी मदद टिम के लिए धन्यवाद। – CraigH
डीबगर में प्रोग्राम के माध्यम से कदम - अपवाद मिलने पर 'प्रबंधित ऑब्जेक्ट मॉडल' का मूल्य क्या है? 'ManagedObjectContext'? – Tim
हाय। ठीक है डीबगर में मुझे प्रबंधित ऑब्जेक्ट मॉडल नहीं दिख रहा है - लेकिन मैं जो देखता हूं वह यह है कि प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट के लिए मूल्य रूटव्यू कंट्रोलर व्यूडिडलोड में शून्य है - जो गलत है, उसके पास एक मान होना चाहिए। ऐप के अनमोडिफाइड संस्करण में ManageDidLoad में प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट का मान 0x3e2ce60 है। और डीबगर इस लाइन पर रुक जाता है: एनएसईएनटीटी डिस्क्रिप्शन * इकाई = [एनएसईएनटीटी डिस्क्रिप्शन इकाईफोरनाम: @ "बुक" में प्रबंधित किया गया ऑब्जेक्ट कॉन्टेक्स्ट: प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट]; जो अंदर है - (NSFetchedResultsController *) रूटव्यू कंट्रोलर के रीडल्ट कंट्रोलर विधि। – CraigH