2015-01-25 4 views
0

Как обновить данные, если они уже существуют в базе данных, когда мы нажимаем кнопку «Сохранить»? Спасибо за помощь.Обновление, если данные существуют

- (IBAction)save:(id)sender { 

NSManagedObjectContext *context = [self.recipe managedObjectContext]; 

if (!self.material) { 
    self.material = [NSEntityDescription insertNewObjectForEntityForName:@"Material" inManagedObjectContext:context]; 
    [self.recipe addMaterialsObject:self.material]; 
    self.material.displayOrder = [NSNumber numberWithInteger:self.recipe.materials.count]; 
    }  
[self.parentViewController dismissViewControllerAnimated:YES completion:nil]; 
} 

ответ

1

Это зависит от вас, как вы определяете экземпляры вашего Material сущности равным. Например, 100 г муки и 200 г муки одинаковые (они должны быть, и вы должны найти способ отделить количество от ингредиента ...).

Вы можете реализовать метод isEqualToMaterial:(Material*)otherMaterial и сравнить основные атрибуты, такие как имя и, возможно, категорию. Прежде чем вставлять новый объект объекта, вы можете вместо него использовать существующий.

Однако из вашего кода я вижу, что вы храните в материальном объекте displayOrder, что зависит от количества материалов в рецепте. Это предположительно перезапишет любой существующий displayOrder - поэтому ваша текущая установка с несколькими в значительной степени идентичными материалами, хотя и не идеальная, может быть тем, что вы хотите.

Возможно, вам стоит подумать о настройке модели данных и разработать способ, которым пользователь может выбрать из списка ингредиентов, прежде чем начинать вводить его самостоятельно.

+0

то, что я хочу сделать, заключается в том, что если имя материала вставлено так же, как в предыдущей записи, оно должно обновить предыдущую запись с помощью вновь вставленной. внутри материального объекта есть два атрибута: имя и сумма. поэтому, если имя в предыдущей записи совпадает. он автоматически обновляет предыдущую запись. : D –

+0

Извините, это не имеет никакого смысла. Как вы можете вставить новое имя и перезаписать существующий материал с другим именем, если вы даже не знаете, какой другой материал переписать. - * Я думаю, что вы над головой в этом проекте. Сначала сделайте что-то более простое. * – Mundi