Представляет модальный контроллер представления, в котором пользователь может ввести некоторую информацию, то при сохранении этой информации с помощью этой функции ...Ошибка при повторном представлении контроллера представления
func handleSave() {
guard let newProductUrl = NSURL(string: urlTextField.text!) else {
print("error getting text from product url field")
return
}
guard let newProductName = self.nameTextField.text else {
print("error getting text from product name field")
return
}
guard let newProductImage = self.logoTextField.text else {
print("error getting text from product logo field")
return
}
DispatchQueue.main.async {
self.productController?.save(name: newProductName, url: newProductUrl as URL, image: newProductImage)
}
// Present reloaded view controller with new product added
let ac = UINavigationController()
let pController = ProductController()
productController = pController
ac.viewControllers = [pController]
present(ac, animated: true, completion: nil)
}
... Я получаю ошибку в viewWillAppear
из ProductController
(контроллера, который представил модальный контроллер представления, и теперь пытается вернуться к)
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
let companyToDisplay = self.navigationItem.title!
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "Product")
fetchRequest.predicate = NSPredicate(format:"company.name == %@",companyToDisplay)
do {
products = try managedContext.fetch(fetchRequest)
print(products)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
ошибки: неожиданно нашел ноль в то время как разворачивание опционального, на линии . Как указать, что self.navigationItem.title
, что он ищет (и отсутствует), является self.navigationItem.title
контроллера, который отправил модальный вид?
Спасибо за любую помощь, я пытался разобраться в этой проблеме в течение нескольких дней и не могу понять это.
EDIT: Вот как я представляю вид модального AddProductController
из моего ProductController
func presentModalView() {
let nc = UINavigationController()
let addProductController = AddProductController()
nc.viewControllers = [addProductController]
self.modalTransitionStyle = UIModalTransitionStyle.coverVertical
self.modalPresentationStyle = .currentContext
self.present(nc, animated: true, completion: nil)
}
EDIT: Ввод кода отправки блока:
DispatchQueue.main.async {
self.productController?.save(name: newProductName, url: newProductUrl, image: newProductImage)
let pController = ProductController()
self.productController = pController
self.navigationController?.pushViewController(pController, animated: true)
}
Я изменил его на 'ac.pushViewController (pController, animated: true) ', и теперь я получаю сообщение об ошибке с ошибкой:« Однократное нажатие одного экземпляра диспетчера экземпляра не поддерживается » – d0xi45
Вы не должны просто изменять одну вещь в своем коде, переключите ac на UINavigationController, если это не сработало, пожалуйста, скажите мне, чтобы отредактировать мой пост и поместить полный код –
Я не уверен, что понимаю, что вы просите - 'UINavigationController.pushViewController (pController, animated: true)' не работает. – d0xi45