Быстрое отношение данных ко многим многим не спасает сущности - PullRequest
0 голосов
/ 13 июня 2019

Я использую следующий код для добавления сущности pokemon в отношение pokemons в user, где pk - это NSManagedObject типа pokemon

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {                 return         }
let managedContext = appDelegate.persistentContainer.viewContext let fetchRequest = NSFetchRequest <NSManagedObject>
(entityName: "User")
let pokemonRequest = NSFetchRequest <NSManagedObject>
(entityName: "Pokemon")

let manyRelation = user.value(forKeyPath: "pokemons") as! NSMutableSet
manyRelation.add(pk)

do {                 
    try managedContext.save()             
}
catch let error as NSError {
    print ("Could not save. \(error), \(error.userInfo)")
}

Приложение показывает, что user имеет сущность покемонов в отношении pokemons. Я перехожу к профилю просмотра ваших покемонов со следующим кодом:

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let destination = storyboard.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController        
self.navigationController?.pushViewController(destination, animated: true)

Где я загружаю данные пользователя с этим кодом:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {                 return         }
let managedContext = appDelegate.persistentContainer.viewContext let fetchRequest = NSFetchRequest <NSManagedObject>
(entityName: "User")
do {
    let users = try managedContext.fetch (fetchRequest)
    for user in users {
        let name = user.value (forKey: "username")
        as? String let pks = user.value (forKey: "pokemons")
        as? NSMutableSet if name = = username {
            for pokemon in pks! {
                self.pokemonsList.append (pokemon as! NSManagedObject)
            }
        }
    }
}
catch let error as NSError {
    print ("Could not fetch. \(error), \(error.userInfo)")
}

Однако переменная pks всегда пуста. Почему переменная всегда пуста? Переменная user имеет pokemons, заполненную:

pokemons = "<relationship fault: 0x600001726da0 'pokemons'>";

1 Ответ

0 голосов
/ 13 июня 2019

Распространенная ошибка - забыть save контекст управляемого объекта после его изменения.Контекст управляемого объекта - это просто рабочее пространство ... если вы не сохраните его, ваши изменения никогда не попадут в постоянное хранилище, и вы не увидите изменения, когда позже сделаете запрос на выборку.Итак ... убедитесь, что вы сохраняете контекст и любые родительские контексты.

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