simonbs
simonbs

Reputation: 8042

Core Data removed objects reappearing on startup

I have some Core Data entries which are all fetched and thrown into an array when the application starts up. When I delete an object from Core Data using deleteObject: I refresh this array by reading all Core Data entries again and throw them into the array. Here, the Core Data object is correctly deleted and is not loaded into the new array. But when I launch the application again, the entries are not removed. They are loaded again.

Does anyone have an idea why my Core Data objects are not correctly removed?

This is where I delete an object:

// Define our table/entity to use  
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Notes" inManagedObjectContext:managedObjectContext];

// Setup the fetch request  
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

// Fetch the records and handle an error  
NSError *error;  
NSMutableArray *allNotes = [[NSMutableArray alloc] initWithArray:[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]];

for(int i = 0; i < [allNotes count]; i++) {
    if([[allNotes objectAtIndex:i] identifier] == [[note objectAtIndex:0] identifier]) {
        [managedObjectContext deleteObject:[allNotes objectAtIndex:i]];
        NSLog(@"DELETING..");
        NSLog(@"%@", [allNotes objectAtIndex:i]);
    }
}

[request release];

This is how I set the array of Core Data entries on start up

// Define our table/entity to use  
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Notes" inManagedObjectContext:managedObjectContext_];

    // Setup the fetch request  
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];

    // Fetch the records and handle an error  
    NSError *error;  
    globalNotes = [[NSMutableArray alloc] initWithArray:[[managedObjectContext_ executeFetchRequest:request error:&error] mutableCopy]];

    [request release];

    NSLog(@"NOTES ON STARTUP");
    NSLog(@"%@", globalNotes);

Here is some data which I print using NSLog. This might help solving the issue and will show, that these notes are deleted but reappers.

2011-04-25 20:11:40.877 Caltio[4039:707] NOTES ON STARTUP
2011-04-25 20:11:40.888 Caltio[4039:707] (
    "<Notes: 0x1855d0> (entity: Notes; id: 0x184cd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: <fault>)",
    "<Notes: 0x1858b0> (entity: Notes; id: 0x184ce0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: <fault>)"
)
2011-04-25 20:16:41.561 Caltio[4039:707] DELETING..
2011-04-25 20:16:41.569 Caltio[4039:707] <Notes: 0x1855d0> (entity: Notes; id: 0x184cd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: {
    added = "2011-04-25 17:56:15 +0000";
    identifier = 2567446185;
    note = Test;
    updated = 0;
})
2011-04-25 20:16:41.589 Caltio[4039:707] NOTES AFTER REFRESH:
2011-04-25 20:16:41.595 Caltio[4039:707] (
    "<Notes: 0x1858b0> (entity: Notes; id: 0x184ce0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: {\n    added = \"2011-04-25 17:57:26 +0000\";\n    identifier = 2567446127;\n    note = Test;\n    updated = 0;\n})"
)

2011-04-25 20:17:05.103 Caltio[4052:707] NOTES ON STARTUP
2011-04-25 20:17:05.115 Caltio[4052:707] (
    "<Notes: 0x1bee60> (entity: Notes; id: 0x1be570 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p2> ; data: <fault>)",
    "<Notes: 0x1bf150> (entity: Notes; id: 0x1bdcd0 <x-coredata://DC8B3294-6D87-4236-9E5C-29E11F7330FA/Notes/p3> ; data: <fault>)"
)

Upvotes: 0

Views: 328

Answers (1)

Stephen Darlington
Stephen Darlington

Reputation: 52565

Do you save your managedObjectContext? As I understand it, adding, amending and deleting objects only really affects their in-memory representation. You also need to save the context to persist it.

Upvotes: 2

Related Questions