Я пытаюсь обновить запись в основных данных, но на самом деле она вставляет новую запись. Следующий код предназначен для разблокировки следующего уровня моей игры.Обновление объекта с данными ядра вставляет новую запись
- (void)unlockNextLevel
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *levelEntity = [NSEntityDescription entityForName:@"Level"
inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:levelEntity];
int nextLevelPosition = [self.position intValue] + 1;
NSPredicate *predicate = [NSPredicate predicateWithFormat:
[NSString stringWithFormat:@"position == %i",
nextLevelPosition]];
[fetchRequest setPredicate:predicate];
NSError *error;
NSArray *result = [[self managedObjectContext] executeFetchRequest:fetchRequest
error:&error];
if (error) {
NSLog(@"%@", error.description);
}
if (result.count > 0) {
Level *nextLevel = result[0];
nextLevel.locked = [NSNumber numberWithBool:NO];
[self saveContext];
}
}
Здесь я принести объект по значению его положение, которым должен быть уникальным (по соглашению), а затем изменить его «заперта» собственность. Я ожидаю, что он обновится, но основные данные вставляют новую запись ...
Объект, который я обновляю, имеет отношение к миру, в котором он находится. Таким образом, у мира много уровней, и уровень имеет только один мир.
Я думаю, что стоит упомянуть, что запись, вставленная в SQLite, не имеет ссылки на World (id of world is null).
Надеюсь, вы можете мне помочь.
Это сделали. Благодаря! – OscarVGG