0

私は私が修正している作業プロジェクトを持っています、

coredataを使おうとするとクラッシュします。

プロジェクトには以前はcoredataがなかったため、追加されました。

以前のベースSDK[number??]の場合applicationDocumentsDirectoryと同様に、URLではなくNSStringを返します。

動作するように変更しましたか?しかし、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を作成しようとしましたが、それでもクラッシュしました。

なぜ私のプロジェクトはreturnメソッドとして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;
}

何をすべきか?

どうもありがとう!

4

1 に答える 1

1

スタックオーバーフローについては、この質問を参照してください

コアデータエラーiPhone

それはあなたの問題を解決します

于 2012-06-13T14:46:50.230 に答える