1
votes

I have been searching stackoverflow and Googling for hours. I made a simple project to mess around with Core Data and bindings. It added an entity to the model and it wouldn't work any more. I was getting "This NSPersistentStoreCoordinator has no persistent stores It cannot perform a save operation" whenever I tried to add data to a new document. I followed every piece of advice I could find with no luck.

Finally, I made a new project (NSPersistentDocument based) and I made a new model from scratch. I made sure the model was perfect before I ran the project for the first time.

In WindowControllerDidLoadNib: The project calls a method to add data. Before addData routine, I log the ManagedObjectContext and the ManagedObjectModel. Neither of them are nil.

I am still getting this %$&#@! error.

Does anyone have any new ideas about this?

EDIT: Could this be because the new untitled document has never been saved? If so, how do you get around that? Can you save an untitled document? Do you really want to?

I had a similar problem a while back on a file import. Since I had full control, I named and saved the document and then I was able to save the context.

1
Okay, it is because the document was never saved. I did a little experiment. I added some objects to the Managed Object Context without saving the it. It all showed up in the tables just fine. Then I saved the file and added more data, saving the context this time. The context saved just fine. So I guess you just can't save the context until the document has be saved at least once.Nancy Poekert

1 Answers

4
votes

As I indicated in the comment above, at least in Mountain Lion you have to save the document at least once before you can save the context. I did some experiments and the small amount of data that I changed was preserved by autosave without saving the context. I have changed my saveContext method to the following:

- (void)saveContext {

    if (![self fileURL]) {
        NSLog(@"Can't save context.  No file name has been set.");
        return;
    } 
    NSError *error = nil;
    if (![self.managedObjectContext save:&error]) {
        [NSApp presentError:error];
        NSLog(@"Error userInfo: %@",[error userInfo]);
        abort();
    }
}