I have a working project that Im amending,
it crashes after trying to use coredata,
The project didnt have coredata before, so it was added,
as it was for a previous base sdk [number??], applicationDocumentsDirectory returns a NSString, and not a URL,
I have changed it to work?? but is crashing when attempting to use coredata,
#import "QRGenAppDelegate.h"
//#import "QRGenViewController.h"
#import "MainViewController.h"
@implementation QRGenAppDelegate
//@synthesize window; //viewController
@synthesize window = _window;
@synthesize navigationController = _navigationController;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
- (void)dealloc
{
[__managedObjectModel release];
[__managedObjectContext release];
[__persistentStoreCoordinator release];
[_window release];
[_navigationController release];
//[viewController release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
MainViewController *menuVC= [[[MainViewController alloc]init]autorelease];
self.navigationController = [[UINavigationController alloc]initWithRootViewController:menuVC];
//self.window.rootViewController = menuVC;
self.navigationController.navigationBar.hidden = YES;
[self.window addSubview:self.navigationController.view];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
//CD
//Explicitly write Core Data accessors
- (NSManagedObjectContext *) managedObjectContext {
if (__managedObjectContext != nil) {
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return __managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel {
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return __managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil) {
return __persistentStoreCoordinator;
}
//mi solucto!!
//NSURL *storeURL= [NSURL URLWithString:[[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ClientOcci.sqlite"]];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"db.sqlite" ofType:nil];
NSURL *storeURL = [NSURL URLWithString:filePath];
// NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ClientOcci.sqlite"];
//NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //actual SDK style for blank db
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
#pragma mark - Application's Documents directory
// Returns the URL to the application's Documents directory.
+ (NSString*)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return documentsDirectory;
}
//CD
- (void)applicationWillResignActive:(UIApplication *)application
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
}
- (void)applicationWillTerminate:(UIApplication *)application
{
}
@end
it crashes in:
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
EXC_BAD_ACCESS
so how I have tried in the project settings to make the base SDK 5.1 but still crashing,
why my project doesnt like the URL as return method?
how to fix it?
if I change this to a newer SDK will brake in other methods?
EDIT>>
I have tried suggestion of @ierror,
adding to my rootVC:
if (managedObjectContext == nil) {
managedObjectContext = [(QRGenAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
NSLog(@"After managedObjectContext: %@", managedObjectContext);}
But now is crashing in the appDelegate,
in
- (NSManagedObjectModel *)managedObjectModel {
if (__managedObjectModel != nil) {
return __managedObjectModel;
}
__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; // crashes here!!!
return __managedObjectModel;
}
what to do?
thanks a lot!
Refer to this question on stack overflow
Core data error iPhone
It will resolve your issue