简体   繁体   English

核心数据无法正确保存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM