2016-06-03 4 views
1

Мои основные данные Сохранять, извлекать и удалять все работают, но мое обновление не работает вообще. Вот мой код:Обновление данных ядра не работает

init() { 
    appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    managedContext = appDelegate.managedObjectContext 
} 

/** 
* Updates team in Core Data 
* 
* - parameter team: the Team to update 
*/ 
func updateTeam(team: Team) { 
    let request = NSFetchRequest(entityName: "Team") 
    request.predicate = NSPredicate(format: "city = %@", team.getCity()) 

    do { 
     if let fetchResults = try self.managedContext.executeFetchRequest(request) as? [NSManagedObject] { 
      if fetchResults.count != 0 { 
       let managedObject = fetchResults[0] 
       managedObject.setValue(team.getCity(), forKey: "city") 
       managedObject.setValue(team.getMascot(), forKey: "mascot") 
       managedObject.setValue(team.getOwner(), forKey: "owner") 
       managedObject.setValue(team.getManager(), forKey: "manager") 
       managedObject.setValue(team.getSeasonWins(), forKey: "seasonWins") 
       managedObject.setValue(team.getSeasonLosses(), forKey: "seasonLosses") 
       managedObject.setValue(team.getCareerWins(), forKey: "careerWins") 
       managedObject.setValue(team.getCareerLosses(), forKey: "careerLosses") 

       try self.managedContext.save() 
      } 
     } 
    } catch { 
     print("Error updating user team") 
    } 
} 

я могу сохранить исходные данные команды, получить данные команды, и удалять данные команды, но когда я пытаюсь обновить команду (код выше), не отражен в следующем поиск.

+1

активизировали Вы через этот код в отладчике? Почему вы выбираете команду, когда вы передаете команду в первую очередь? Почему у вас есть все эти функции getCity() вместо прямого доступа к свойствам команды? – jrturton

+0

Ну, для обновления у вас уже была полученная команда. Итак, если вы хотите обновить, вы должны передать измененную команду обратно, захватить старую команду в базе данных (предоставив предикат «city = team.getCity()», так как город никогда не меняется), а затем обновление управляемого объекта с новыми данными Команды. Правильно ли это звучит? –

+0

@LoganJahnke Не нужно возвращать. Предполагая, что «город» уникален, «managedObject» и «team» являются самим тем же объектом (CoreData обеспечивает уникальность - один объект из хранилища будет иметь только один экземпляр в файле managedObjectContext). Следовательно, вы получаете значения атрибутов и присваиваете их тем же атрибутам одного и того же объекта. – pbasdf

ответ

-1

Убедитесь, что атрибут Transient (для всех ключей) не проверить в вашем .xcdatamodel

Transient attribute

+0

Если сохранение и получение данных работают, как говорит собеседник, как это может быть проблемой? – jrturton

+0

Он сказал, что не может изменять данные. Мне просто интересно, блокирует ли этот атрибут его (потому что это заблокировало меня в проекте) –

+0

Переходные атрибуты не сохранялись и не извлекались. – jrturton

Смежные вопросы