【发布时间】:2017-12-19 08:37:41
【问题描述】:
我很难理解为什么 reloadData() 行会崩溃并出现以下错误“在展开可选值时意外发现 nil”(另外,为什么它是可选的?)。基本上,当用户点击一个按钮时,它会触发一个 API 请求,显示第二个 VC(recipesVC),当从 API 检索数据时,在 receivedRecipes 方法(以前的 VC)中我想从 recipesVC(currentVC)重新加载数据 由于我的数据已正确传递给 recipesVC,我不明白为什么 reloadData() 不能在同一个 VC 上工作。你能给我一点帮助吗? 谢谢。
override func viewDidLoad() {
super.viewDidLoad()
let recipes = Notification.Name(rawValue: "gotRecipes")
NotificationCenter.default.addObserver(self, selector: #selector(receivedRecipes),name: recipes, object: nil)
}
@objc func receivedRecipes() {
let recipesVC = storyboard?.instantiateViewController(withIdentifier: "recipesList") as! RecipesViewController
recipesVC.recipesList = request.recipeDetails
recipesVC.recipes.reloadData()
}
【问题讨论】:
-
recipesVC.recipes为零吗?在 VC 方面正确设置/连接?你没有出席recipesVC?在RecipesViewController中如何声明recipes?但如果设置正确,你仍然会得到这个:stackoverflow.com/questions/12523198/… -
recipesVC.recipes 确实为零。 recipes 正确设置为 IBOutlet 并已连接,我使用 segue 来展示 VC。当用户点击按钮时,执行 segue,显示 VC,然后当我获取数据时,我想重新加载 tableview。
-
那肯定是因为这个:stackoverflow.com/questions/12523198/…原因是一样的。
-
什么?你是说你已经显示了
RecipesViewController(带有segue),而在之前的ViewController上,当它获取数据时,它需要对显示的RecipesViewController说重新加载?如果这就是你的意思,那显然不是你的代码在做什么:recipesVC是一个全新的对象,而不是呈现的那个。 -
这正是我想要做的。
标签: ios swift uitableview crash reloaddata