Swift 将CoreData从UITableViewCell传递到viewcontroller
我正在尝试创建一个功能,当用户单击我的UITableView中的特定单元格时,项目将切换到一个新的ViewController,并显示保存在CoreData中的所有信息。问题是,当我触摸一个电池时,我会得到一个错误Swift 将CoreData从UITableViewCell传递到viewcontroller,swift,xcode,uitableview,core-data,viewcontroller,Swift,Xcode,Uitableview,Core Data,Viewcontroller,我正在尝试创建一个功能,当用户单击我的UITableView中的特定单元格时,项目将切换到一个新的ViewController,并显示保存在CoreData中的所有信息。问题是,当我触摸一个电池时,我会得到一个错误 Unexpected nil while unwrapping optional value 下面是我的代码,它现在位于具有TableView的ViewController中 class ContactViewController: UIViewController, UITabl
Unexpected nil while unwrapping optional value
下面是我的代码,它现在位于具有TableView的ViewController中
class ContactViewController: UIViewController, UITableViewDataSource, NSFetchedResultsControllerDelegate, UITableViewDelegate {
var selectName:String?
var selectPhone:String?
var selectComment:String?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectName = contact[indexPath.row].name
selectPhone = contact[indexPath.row].phone
selectComment = contact[indexPath.row].comments
performSegue(withIdentifier: "MySegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue"{
if let destVC = segue.destination as? IndiViewController {
destVC.NameLabel = selectName
destVC.PhoneLabel = selectPhone
destVC.CommentLabel = selectComment
}
}
}
这是我在IndividualWController(我希望用户在其中查看联系人的VC)中的代码
我尝试了其他几种方法,但都出现了相同的错误
我进行了一些故障排除,以查看哪个变量真正导致了nil:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue"{
if let destVC = segue.destination as? IndiViewController {
destVC.NameLabel = "selectName" //I thought if perhaps the nil was the var selectName this would at least let me know
}
}
然而,即使这样,应用程序也会崩溃并出现同样的错误。所以我认为问题在于IndividualWController中的标签
因此,我尝试创建一个空字符串并将其分配给NameLabel,如下所示:
class IndiViewController: UIViewController {
@IBOutlet var NameLabel: UILabel!
var name = ""
override func viewDidLoad() {
super.viewDidLoad()
NameLabel.text = name
}
}
但还是没有运气
我做错了什么?但这可能是一个IBOutlet错误,即使是打字错误
@IBOutlet var namelab:UILabel代码>
ui标签的新插座,并且不要用大写字母命名
/@IBOutlet var namelab:UILabel
@IBOutlet var名称标签:UILabel代码>
class IndiViewController: UIViewController {
@IBOutlet var nameLabel: UILabel!
var myText: String = ""
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = myText // assign the var to the labels text
}
}myText
,而不是namelab.text
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue"{
if let destVC = segue.destination as? IndiViewController {
destVC.myText = "selectName"
}
}
}
我猜你不能用
prepare(for segue:)
方法访问IBOutlets。目标ViewController尚未构建,但它可能是一个IBOutlet错误,即使是打字错误
@IBOutlet var namelab:UILabel代码>
ui标签的新插座,并且不要用大写字母命名
/@IBOutlet var namelab:UILabel
@IBOutlet var名称标签:UILabel代码>
class IndiViewController: UIViewController {
@IBOutlet var nameLabel: UILabel!
var myText: String = ""
override func viewDidLoad() {
super.viewDidLoad()
nameLabel.text = myText // assign the var to the labels text
}
}myText
,而不是namelab.text
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue"{
if let destVC = segue.destination as? IndiViewController {
destVC.myText = "selectName"
}
}
}
我猜你不能用
prepare(for segue:)
方法访问IBOutlets。目标ViewController尚未构建您的名称标签
插座是否正确链接到您的故事板?@Olympilotre是的,我甚至重新连接了它们,只是为了确保个人控制器
在未向其传递数据的情况下自行失败,它看起来很像是一个错误的出口引用,请尝试替换@IBOutlet var namelab:UILabel使用@ibvar-name-label:UILabel?
编码>然后在viewDidLoad打印(name-label)
感谢您的输入,但是它仍然会崩溃,错误是该类不符合密钥名称标签的键值编码
您的名称标签
插座是否正确链接到您的故事板?@Olympilotre是的,我甚至重新连接了它们,只是为了确保IndividualWController
本身没有向其传递数据就失败了,它看起来很像是一个错误的出口引用,请尝试替换@IBOutlet var namelab:UILabel使用@ibvar-name-label:UILabel?
编码>然后在viewDidLoad打印(name-label)
感谢您的输入,但是它仍然会崩溃,错误是这个类不符合键值编码的键值名称标签
当我使用这个方法时,我第一次尝试这样做destVC.namelab?.text=selectName
,它没有崩溃,但是没有任何标签真正被更改,它们都只是说“标签”。然后,当我从代码中删除?
,例如destVC.namelab.text=selectName
时,应用程序在隐式展开可选值时意外发现了nil
@TariqKhan只需编辑我的帖子,请尝试此方法。不太确定您是否可以使用prepareForSegue方法访问目的地的门店。啊,是的,这正是我所缺少的!现在它起作用了。非常感谢你。我认为问题在于,namelab
需要先初始化。这就是特里克尼斯!另外,尽量不要将outlet(var)放在大写字母中当我使用这个方法时,我第一次尝试这样做destVC.nameLabel?.text=selectName
,它没有崩溃,但是没有任何标签真正改变,它们都只是说“标签”。然后,当我从代码中删除?
,例如destVC.namelab.text=selectName
时,应用程序在隐式展开可选值时意外发现了nil
@TariqKhan只需编辑我的帖子,请尝试此方法。不太确定您是否可以使用prepareForSegue方法访问目的地的门店。啊,是的,这正是我所缺少的!现在它起作用了。非常感谢你。我认为问题在于,namelab
需要先初始化。这就是特里克尼斯!此外,尽量不要将outlet(var)放在大写字母中