EXC_BAD_ACCESS while working with Core Data

て烟熏妆下的殇ゞ 提交于 2019-12-08 07:06:47

问题


I'm new into Cocoa and am writing a simple app to learn working with Core Data, but it crashes with EXC_BAD_ACCESS. Tried several things and haven't find the solution yet. As I said, I'm not very experienced in Cocoa.

I have followed the usual Core Data tutorials.

This is my Model:

I've added these two entities as NSArrayController in my Nib file and have two NSTableViews with Value Binding to the entity objects.

And here's the code:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSManagedObjectContext *context = [self managedObjectContext];
    TaskList *list = [NSEntityDescription
                      insertNewObjectForEntityForName:@"TaskList"
                      inManagedObjectContext: context]; // EXC_BAD_ACCESS happens here
    [list setTitle:@"Inbox"];
    Task *task = [NSEntityDescription
                  insertNewObjectForEntityForName:@"Task"
                  inManagedObjectContext: context];
    [task setKey:@"Remember the milk"];
    [task setList:list];
    NSError *error;
    if (![context save:&error]) {
        NSLog(@"Error: %@", [error localizedDescription]);
    }
}

That's it! That's all my program. I am using Xcode 4.2, developing a Mac app, and ARC is enabled.

UPDATE: jrturton asked me to include implementation of [self managedObjectContext]. I didn't write this code, but here's what I found in AppDelegate.h:

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

And this is from AppDelegate.m:

@synthesize managedObjectContext = __managedObjectContext;
...
/**
    Returns the managed object context for the application (which is already
    bound to the persistent store coordinator for the application.) 
 */
- (NSManagedObjectContext *)managedObjectContext {
    if (__managedObjectContext) {
        return __managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (!coordinator) {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey];
        [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey];
        NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
        [[NSApplication sharedApplication] presentError:error];
        return nil;
    }
    __managedObjectContext = [[NSManagedObjectContext alloc] init];
    [__managedObjectContext setPersistentStoreCoordinator:coordinator];

    return __managedObjectContext;
}

回答1:


Check your managed object model. Make sure all the entity and attribute names are spelled correctly. Also check your object class files and make sure they contain what you expect.

Maybe the debugger does not show you the correct row when crashing: I noticed, that you have a method setKey:, but no attribute called keyin your Task entity. Try setting all the attributes with the dot notation, like list.title = @"Inbox". (This is generally easier to read and avoids similar errors.)

As suggested, before the line inserting the new entity, set a breakpoint and make sure the managed object context is not null.

Finally, perhaps you have to cast your object. insertNewObjectForEntityForName: returns an object of type NSManagedObject, but you are assigning it to a type TaskList. Try adding the cast before you use the object:

TaskList *list = (TaksList *) [NSEntityDescription
                  insertNewObjectForEntityForName:@"TaskList"
                  inManagedObjectContext: context];



回答2:


I had this same issue. I resolved it like Mostafa said above. If you create a project with Core Data enabled, it will automatically create a file for you. Use this .xcdatamodeld file instead of a custom one. If you have one already created, just delete the originally created file and rename your datamodel file to the originally created file name.



来源:https://stackoverflow.com/questions/8196879/exc-bad-access-while-working-with-core-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!