[英]Core data won't save correctly
I'm using a data model called settings which I setup in didLoad of my viewController: 我正在使用一个名为设置的数据模型,该模型是在viewController的didLoad中设置的:
settings = [NSEntityDescription insertNewObjectForEntityForName:@"Settings" inManagedObjectContext:[self managedObjectContext]];
Heres the managedobjectContext method: 这里是managedobjectContext方法:
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
When my stepper increments I want to update a string and then update the db. 当步进增加时,我想更新一个字符串,然后更新数据库。
- (IBAction)RowStepperAction:(UIStepper *)sender
{
double value = [sender value];
settings.numberofrows = [NSNumber numberWithDouble:value];
[self.RowNumber setText:[NSString stringWithFormat:@"%d", (int)value]];
NSError *error = nil;
// Save the object to persistent store
if (![[self managedObjectContext] save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
When I come to load the view again I do: 当我再次加载视图时,我会执行以下操作:
[self.ColumnStepper setValue:[settings.numberofcolumns doubleValue]];
[self.RowStepper setValue:[settings.numberofrows doubleValue]];
This returns the default values I set in the database. 这将返回我在数据库中设置的默认值。 Why is this?
为什么是这样?
Every time you load the view again, you're creating a brand new settings object : 每次再次加载视图时,都会创建一个全新的设置对象:
settings = [NSEntityDescription insertNewObjectForEntityForName:@"Settings" inManagedObjectContext:[self managedObjectContext]];
This will have your default values. 这将是您的默认值。 You need instead to fetch your existing settings object, and only create a new one if that doesn't exist.
相反,您需要获取现有的设置对象,并且仅在不存在的情况下创建一个新的对象。
Your database will currently have several settings objects, one for each time you've loaded the view. 您的数据库当前将有几个设置对象,每次加载视图时一个对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.