Alex G
Alex G

Reputation: 2309

Saving CoreData permanently

I have been trying all afternoon to get the CoreData portion of my app working and almost have it working as it should. The problem is that the CoreData does not save appropriate value when the app gets terminated (removed from multitasking menu). The value that remains is the intitial value (in my case 0, defined as NSString) I put into the entity instead of the new value the user entered. So the issue is saving the new value PERMANENTLY after the app is closed and not showing the initial value again when the app is loaded

Entity name: Gameinfo

Attribute: score

I am not sure what I am doing wrong. If anyone could help me, it would be appreciated. Thanks!

-(IBAction)saveTheory1
{
AppDelegate *appDelegate= [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = 
[appDelegate managedObjectContext];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Gameinfo"];
NSError *error = nil;
NSArray *someArray = [context executeFetchRequest:request error:&error];   
[[someArray objectAtIndex:0] setValue:[self showKey] forKey:@"score"]; // showKey gets the text from UITextField
}

-(IBAction)showTheory1;

{
AppDelegate *appDelegate= [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = 
[appDelegate managedObjectContext];
NSEntityDescription *entityDesc = 
[NSEntityDescription entityForName:@"Gameinfo" 
            inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request 
                                          error:&error];
matches = [objects objectAtIndex:0];
NSLog (@"show us the current value: %@", [matches valueForKey:@"score"]);
}

Upvotes: 0

Views: 320

Answers (2)

Martin
Martin

Reputation: 747

It doesnt look like you are calling [context save:error] anywhere. This is what moves your changes into permanent storage.

Upvotes: 0

Eimantas
Eimantas

Reputation: 49334

You are not saving the value at all. You are just assigning it to the Gameinfo object. To actually save it, call save: method on managed object context:

    ...
    [[someArray objectAtIndex:0] setValue:[self showKey] forKey:@"score"];
    NSError *saveError = nil;
    [[appDelegate managedObjectContext] save:&saveError];
}

Upvotes: 4

Related Questions