簡體   English   中英

xcode ios:將coredata包含到舊項目后崩潰

[英]xcode ios : crashing after including coredata to old project

我有一個正在修改的工作項目,

嘗試使用coredata后崩潰

該項目之前沒有coredata,因此它被添加了,

就像以前的基本sdk [number ??]一樣, applicationDocumentsDirectory返回一個NSString,而不是URL,

我已將其更改為工作?? 但是在嘗試使用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

它崩潰:

__managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

EXC_BAD_ACCESS

所以我在項目設置中嘗試制作基本SDK 5.1但仍然崩潰,

為什么我的項目不喜歡URL作為返回方法? 如何解決? 如果我將其更改為較新的SDK,是否會采用其他方法?

編輯>>我嘗試過@ierror的建議,

添加到我的rootVC:

if (managedObjectContext == nil) { 
        managedObjectContext = [(QRGenAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
        NSLog(@"After managedObjectContext: %@",  managedObjectContext);}

但是現在在appDelegate中崩潰了,

- (NSManagedObjectModel *)managedObjectModel {
    if (__managedObjectModel != nil) {
        return __managedObjectModel;
    }
    __managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; // crashes here!!!

    return __managedObjectModel;
}

該怎么辦?

非常感謝!

請參考堆棧溢出問題

核心數據錯誤iPhone

它將解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM