【发布时间】:2017-02-14 20:18:05
【问题描述】:
我展示了一个模态视图控制器,用户可以在其中输入一些信息,然后使用此功能保存该信息...
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)
}
...我在ProductController 的viewWillAppear 中遇到错误(呈现模态视图控制器的控制器,现在正试图返回)
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)")
}
}
错误是:在展开可选选项时意外发现 nil,位于 let companyToDisplay = self.navigationItem.title! 行。如何指定它正在寻找(和丢失)的self.navigationItem.title 是发送模态视图的控制器的self.navigationItem.title?
感谢您的帮助,我已经尝试解决这个问题好几天了,但无法解决。
编辑:这就是我从ProductController 呈现模态视图AddProductController 的方式
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)
}
编辑:将代码放入调度块中:
DispatchQueue.main.async {
self.productController?.save(name: newProductName, url: newProductUrl, image: newProductImage)
let pController = ProductController()
self.productController = pController
self.navigationController?.pushViewController(pController, animated: true)
}
【问题讨论】:
标签: ios uitableview core-data