gpt4 book ai didi

ios - 将数据从表传递到第一个 View Controller - 错误 : unexpectedly found nil while unwrapping an Optional value

转载 作者:行者123 更新时间:2023-11-29 01:04:33 26 4
gpt4 key购买 nike

当我尝试将选定的表行传递回我的第一个 View Controller 时,它给出了一个选项为 nil 的错误。

但是,我可以打印我想传递的变量的值。

View Controller 按此顺序排列。

  1. 向库存添加新“商品”
  2. 选择新 VC 以选择“类别”,然后选择另一个 VC 以选择子类别。
  3. 从那些你可以转到另一个 VC 来创建类别和子类别。

项目来源@ https://github.com/GadgetAddict/InventoryApp

override func tableView(tableView: UITableView,  didSelectRowAtIndexPath indexPath: NSIndexPath) {
let dict = items[indexPath.row]

let selectedSub = dict["subname"] as! String

let newCat = Category(catName: passedCategory, subcatName: selectedSub)
print(newCat.catName)
print(newCat.subcatName)

delegate.setCats(newCat)

self.navigationController?.popToRootViewControllerAnimated(true)

}

最佳答案

我在 Github 上查看了您的代码,发现您在显示 DestinationViewController 之前没有设置委托(delegate)。因此,我相信如果您在该行 delegate.setCat("something") 上放置一个断点,您将看到您的委托(delegate)值设置为 nil

有两种解决方法。首先是继续委托(delegate)模式,你的代码应该看起来像这样;在呈现 DestinationViewController 之前,使 delegate 值不是 nil

let subCatVC = self.storyboard?.instantiateViewControllerWithIdentifier("yourSubCatStoryboardIdentifier") as! SubcategoryVC
subcatvc.delegate = self

接下来我要说的可能并不完全正确,这只是我假设 iOS 的底层架构是如何工作的。

委托(delegate)方法很难跨多个屏幕执行。例如,您的应用程序转到 NewItemVC -> CategoryVC -> SubCategoryVC,因此您在 NewItemVC 处初始化的 delegate,当您到达 SubCategoryVC 时可能是 nil,因为它要么当您将它设置为 NewItemVC 时,内存尚未分配,或者当您到达 CategoryVC 时它已被重置。

所以我建议使用 NSNotificationCenter 将您的数据从 DestionationVC 传回 NewItemVC。这些代码应该看起来像这样:

NewItemVC.swift

override func viewDidLoad(){
super.viewDidLoad()
let notifCenter = NSNotificationCenter.defaultCenter()
notifCenter.addObserver(self, selector: #selector(NewItemVC.setCat), name: "setCategoryNotification", object: nil)
}

func setCat(notification:NSNotification){

let userInfo:Dictionary<String,String!> = notification.userInfo as Dictionary<String,String!>
//your selected category can be extracted here
let selectedCategory = userInfo["selectedCategory"]
}

SubCategoryVC.swift

override func tableView(tableView: UITableView,  didSelectRowAtIndexPath indexPath: NSIndexPath) {
let dict = items[indexPath.row]

let selectedSub = dict["subname"] as! String

let newCat = Category(catName: passedCategory, subcatName: selectedSub)
print(newCat.catName)
print(newCat.subcatName)

let notifCenter = NSNotificationCenter.defaultCenter()
notifCenter.postNotificationName("setCategoryNotification",
object:nil,
userInfo:["selectedCategory":selectedSub])

self.navigationController?.popToRootViewControllerAnimated(true)

}

关于ios - 将数据从表传递到第一个 View Controller - 错误 : unexpectedly found nil while unwrapping an Optional value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36559619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com