核心数据无法正确保存

时间:2014-12-21 17:50:37

标签: ios objective-c core-data

我正在使用一个名为settings的数据模型,我在viewController的didLoad中设置:

settings = [NSEntityDescription insertNewObjectForEntityForName:@"Settings" inManagedObjectContext:[self managedObjectContext]];

继承了managedobjectContext方法:

- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
}
return context;
}

当我的步进器递增时,我想更新一个字符串,然后更新数据库。

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

当我再次加载视图时,我会这样做:

[self.ColumnStepper setValue:[settings.numberofcolumns doubleValue]];
[self.RowStepper setValue:[settings.numberofrows doubleValue]];

这将返回我在数据库中设置的默认值。这是为什么?

1 个答案:

答案 0 :(得分:2)

每次再次加载视图时,您都会创建一个全新的设置对象:

settings = [NSEntityDescription insertNewObjectForEntityForName:@"Settings" inManagedObjectContext:[self managedObjectContext]];

这将具有您的默认值。您需要获取现有的设置对象,并且只创建一个新对象(如果不存在)。

您的数据库当前有几个设置对象,每次加载视图时都有一个。