永久保存CoreData

时间:2012-08-09 06:47:03

标签: objective-c ios xcode

我整个下午都在努力让我的应用程序的CoreData部分工作,并且几乎让它按预期工作。问题是,当应用程序终止时,CoreData不会保存适当的值(从多任务菜单中删除)。保留的值是我输入实体而不是用户输入的新值的初始值(在我的情况下为0,定义为NSString)。所以问题是在应用关闭后永久保存新值,并且在加载应用时不再显示初始值

实体名称:Gameinfo

属性:score

我不确定我做错了什么。如果有人能帮助我,我们将不胜感激。 谢谢!

-(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"]);
}

2 个答案:

答案 0 :(得分:4)

您根本没有保存该值。您只是将其分配给Gameinfo对象。要实际保存它,请在托管对象上下文中调用save:方法:

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

答案 1 :(得分:0)

看起来你在任何地方都在调用[context save:error]。这就是将您的更改移动到永久存储中的原因。