Я использую следующий код для добавления сущности 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'>";