Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can not delete an entity from Core Data, using RestKit 0.20

The code below does not delete the entity. The "delete was successful" message appears on the console so the entity is found. All other operations I use succeed.

I am using RestKit 0.20.

NSManagedObjectContext *context = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
NSError *error = nil;

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity: [NSEntityDescription entityForName:@"Auction" inManagedObjectContext:context]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"AuctionID = %d", auctionID];
[fetchRequest setPredicate:predicate];

NSArray *result = [context executeFetchRequest:fetchRequest error:&error];
if(result.count) {
    Auction *block = result[0];
    [context deleteObject:block];
    BOOL status = [context save:&error];
    if (status == NO) {
        NSLog(@"delete falied for AuctionID:%d, error: %@", auctionID, error);
    }
    else {
        [context processPendingChanges];
        NSLog(@"delete was successful for AuctionID:%d", auctionID);

    }
}

Why might this delete operation not succeed and what is the solution to making it work.

like image 351
zaph Avatar asked Feb 26 '13 18:02

zaph


3 Answers

I found this solution :

In fact, you have to fetch datas from the persistentstore and not the current created managed context :

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyModel"];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:NO];
fetchRequest.sortDescriptors = @[descriptor];

// Setup fetched results
NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                        managedObjectContext:[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];

// AND TO DELETE A MODEL :

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:myobject];
like image 110
Sebastien Avatar answered Oct 17 '22 21:10

Sebastien


i am doing the same thing and have nearly same code. In my code also, i get delete done and saved....

But, its not deleted when i am checking DB.

the problem is not with simulator... SURE bcz i am getting same problem on device also. there is something called child context, it might be the cause...Check these links http://restkit.org/api/0.20.0-dev/Classes/RKManagedObjectRequestOperation.html#//api/name/managedObjectContext RestKit 0.20 — What is the preferred way to create a new NSManagedObject? . If you found solution pls share here

like image 2
Sumitiscreative Avatar answered Oct 17 '22 22:10

Sumitiscreative


@Sumitiscreative I ran into the same issue today. What if found was that normally using Core Data you have to use

[NSManagedObject save:] 

for it to store the changes. I dug through Restkit a bit and found this

[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext deleteObject:(NSManagedObject *)];
[[RKManagedObjectStore defaultStore].persistentStoreManagedObjectContext saveToPersistantStore:(NSError *)];

Calling this after the above delete method is working to remove the object out of the DB.

**Edit - Also I would have just made this a comment but i don't have the option

like image 2
Lbatson Avatar answered Oct 17 '22 21:10

Lbatson