Swift:无法通过使用发送者的 segue 设置 [String]

     2023-02-23     290

关键词:

【中文标题】Swift:无法通过使用发送者的 segue 设置 [String]【英文标题】:Swift: Failing to set a [String] through a segue using the sender 【发布时间】:2018-07-16 11:58:45 【问题描述】:

美好的一天。我正在创建自己的第一个应用程序并遇到了问题。我有一个带有可点击内容的 AR 场景,当您触摸它们时,segue 会触发 ViewController 并根据屏幕上触摸的内容设置视图控制器标签和文本视图。

说明: 1. CaseViewController 是目标视图控制器。 2. "artNews" 和 "politicalNews" 是字符串数组,我在其中写了 3 个字符串,它们被定义并且永远不会为 nil。

问题:由于 segueInputText 为 nil,我遇到了崩溃。为什么它会变成 nil,我该如何纠正它?

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

    let destinationVC = segue.destination as! CaseViewController
    destinationVC.segueInputText = sender as? [String]

    print("\(String(describing: sender))")


override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 

    guard let touchLocation = touches.first?.location(in: sceneView),
        let hitNode = sceneView?.hitTest(touchLocation, options: nil).first?.node,
        let nodeName = hitNode.name
        else  return 

    if nodeName == imageNameArray[0] 

        performSegue(withIdentifier: "CaseViewController", sender: artNews)

     else 
        print("Found no node connected to \(nodeName)")
        return
    

    if nodeName == imageNameArray[1] 

        performSegue(withIdentifier: "CaseViewController", sender: politicalNews)

     else 
        print("Found no node connected to \(nodeName)")
        return
    

CaseViewController 连接了 UILabels 和 UITextViews 并且这个:

    var segueInputText : [String]? 
    didSet 
        setupText()
    


    func setupText() 

    // Why are these values nil? 
    testLabel.text = segueInputText![0]
    ingressLabel.text = segueInputText![1]
    breadLabel.text = segueInputText![2]

    testLabel.reloadInputViews()
    ingressLabel.reloadInputViews()
    breadLabel.reloadInputViews() //breadLabel is a UITextView

感谢您阅读我的问题! 亲切的问候。

【问题讨论】:

【参考方案1】:

删除 didSet 块,因为当您在 prepare 中设置数组时,观察触发器并且 lbl 仍然是 nil

func setupText() 
   if testLabel == nil  // if one is nil then all of them too
     return 
   
 

【讨论】:

您应该改为从viewWillAppear 中调用setupText。然后,你也可以跳过 if 语句。【参考方案2】:

在这种情况下不要使用didSet 观察者。它永远不会起作用。

setupText() IBOutlets 中被访问,但在调用prepare(for 时尚未连接。


移除观察者

var segueInputText : [String]?

并在viewWillAppear 中致电setupText

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    setupText()

【讨论】:

“不要使用r the” - 可能是错字?【参考方案3】:

在你这样做的那一刻:

destinationVC.segueInputText = sender as? [String]

目标视图控制器尚未加载,因此没有连接任何插座,因此访问它们中的任何一个都会使您的应用程序崩溃,因为它们仍然为零。

您必须将要传递给目标控制器的任何值分配给一个属性,并将该属性的值分配给viewDidLoad 中的相应插座。这样可以确保所有插座都已连接。

出于同样的原因,不要使用属性观察器将属性的值分配给任何标签,因为这会再次发生,在视图控制器有机会加载之前......

【讨论】:

Swift ViewController textFieldCancel:]:在segue期间发送到实例的无法识别的选择器[重复]

...SwiftViewControllertextFieldCancel:]:在segue期间发送到实例的无法识别的选择器[重复]【英文标题】:SwiftViewControllertextFieldCancel:]:unrecognizedselectorsenttoinstanceduringsegue[duplicate]【发布时间】:2015-05-2301:26:32【问题描述】:我在尝试从最初... 查看详情

使用 Swift 2.0 在 segue 之间传递数据

...2-2603:20:05【问题描述】:我似乎正在关注tee的教程,但我无法让我的数据在不为零的情况下传递给我的第二个视图控制器。我是Swift新手,所以我可能也没有正确使用选项。这是我设置代码的方式。importUIKitclassDetailsViewController:UI... 查看详情

执行 segue swift 4

...发生转场。我从最初设置为true的变量决策开始,如果我无法验证用户,我想将其设置为false并防止segue。这是我的代码,但它有问题。最后的return语句始终为真。基本上发生的事情是在从数据库返回响 查看详情

使用 Swift 在没有情节提要的情况下展开 segue

...gSwift【发布时间】:2016-07-0202:38:36【问题描述】:我似乎无法找到解决此问题的方法。我发现的所有关于展开转场的主题都通过情节提要实现转场。我正在尝试学习如何在代码中纯粹制作我的布局。所以在我的新Xcode项目中,我... 查看详情

快速通过segue传递数组

...,我发现segue和prepareForSegue是一个可行的选择,但我似乎无法弄清楚。我做错了什么?我在SecondVie 查看详情

我无法使用 gmail SMTP 通过 swift 邮件发送邮件

】我无法使用gmailSMTP通过swift邮件发送邮件【英文标题】:I\'mfailingtosendmailwithswiftmailusinggmailSMTP【发布时间】:2018-09-1316:25:43【问题描述】:我收到了这个错误Expectedresponsecode250butgotcode"530",withmessage"530-5.5.1AuthenticationRequired.Learnmor... 查看详情

Segue 未在 Swift 中发送正确的单元格信息

】Segue未在Swift中发送正确的单元格信息【英文标题】:SeguenotsendingcorrectcellinfoinSwift【发布时间】:2015-11-0202:46:35【问题描述】:我有一个tableView,当按下一个单元格时,它会触发一个详细视图的segue。该表包含与currentUser为朋友... 查看详情

通过 Segue 传递数据(swift 2)

】通过Segue传递数据(swift2)【英文标题】:PassingDataThroughSegue(swift2)【发布时间】:2015-12-1320:09:01【问题描述】:这是一个小费计算器项目,它必须有一个设置视图,我可以在其中选择默认小费率。我在传递数据时遇到了一些问... 查看详情

无法使用 segue (Xcode 7) (Swift) 在视图控制器之间传递数据

】无法使用segue(Xcode7)(Swift)在视图控制器之间传递数据【英文标题】:Can\'tpassdatabetweenviewcontrollersusingsegues(Xcode7)(Swift)【发布时间】:2016-09-2016:02:58【问题描述】:我一直在努力使用segue在视图控制器之间传递数据。我看过很多you... 查看详情

VC 之间的 Swift Segue 没有任何联系

...视图控制器,但如果不将其附加到我的tableview单元格,我无法弄清楚如何链接它们。我希望它只是一个带有标识符的简单segue,因此我可以使用标识符调用perfromsegue。但是,我只能通过将它从我的 查看详情

创建一个 segue 并通过 Swift 在两个视图控制器之间附加它?

】创建一个segue并通过Swift在两个视图控制器之间附加它?【英文标题】:CreateasegueandattachitbetweentwoviewcontrollersthroughSwift?【发布时间】:2016-05-0603:21:31【问题描述】:我们如何在不使用Storyboard的情况下以编程方式快速创建segue。... 查看详情

Swift - 通过 segue 传递值

】Swift-通过segue传递值【英文标题】:Swift-passingvaluesviasegue【发布时间】:2015-04-1818:40:23【问题描述】:我试图通过segue传递一些变量。最初,我在第一个屏幕上捕获了6个变量,我想将它们传递给第二个视图控制器。每个变量都... 查看详情

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue

】无法使用Xcode8和Swift3在SpriteKit中以编程方式触发segue【英文标题】:Can\'tprogrammaticallytriggersegueinSpriteKit,usingXcode8andSwift3【发布时间】:2017-04-0222:46:54【问题描述】:我正在使用SpriteKit在Xcode8中制作游戏,并且一直很难以编程方... 查看详情

使用 material.io 时通过 segue 链接按钮

】使用material.io时通过segue链接按钮【英文标题】:Linkingupabuttonthroughaseguewhenusingmaterial.io【发布时间】:2019-10-2409:19:43【问题描述】:我是Swift的初学者,我正在使用Swift中的Material.io创建一个登录屏幕,我的UI看起来像这样。但... 查看详情

Swift - 在 segue 之后保存 ViewController 设置

...1-0817:59:16【问题描述】:目前我必须ViewControllers。您可以使用show-segues在ViewControllerA和ViewControllerB之间切换。问题是每次我切换回来时,ViewControllers状态都会被重置。 查看详情

Swift - 在闭包内调用 segue

...4:30:34【问题描述】:我试图在闭包内调用segue,但我似乎无法使其工作。问题是我不知道如何进行“performSegueWithIdentifier”调用,因为我不能在这里使用关键字“self”。这是在UIViewController之外完成的,所以我不知道如何在不使... 查看详情

iOS Swift 使用 Firebase 云消息发送丰富的推送通知

...oudMessaging【发布时间】:2020-07-0617:59:44【问题描述】:我无法让Firebase推送通知使用图像来工作。我通过FCM接口发送有效载荷。当我使用图像链接填写“通知图像”字段时,在我的设备上进行测试时图像无法通过。推送通知已成... 查看详情

Swift:将数据传递给 segue

...的按钮来改变我的segue行为。两个按钮都打开了samVC,但通过了不同的颜色和更多的信息。但我也想在打开第二个VC时更改动画。按照教程,我使用CustomSegue类制作了CustomSegue.swift:UIStoryboardSegue。在那个课程中,我有我的 查看详情