Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当包含以编程方式显示的视图控制器时,发现IBOutlet引用为零_Ios_Swift_Viewcontroller_Presentmodalviewcontroller_Presentviewcontroller - Fatal编程技术网

Ios 当包含以编程方式显示的视图控制器时,发现IBOutlet引用为零

Ios 当包含以编程方式显示的视图控制器时,发现IBOutlet引用为零,ios,swift,viewcontroller,presentmodalviewcontroller,presentviewcontroller,Ios,Swift,Viewcontroller,Presentmodalviewcontroller,Presentviewcontroller,我正在构建一个正在运行的应用程序,并试图在点击开始运行按钮时以编程方式呈现一个视图控制器。但是,当我在设置presenting view控制器后点击该按钮时,在按调用顺序展开IBOutlet时,会发现对IBOutlet的任何引用均为零 值得注意的是,当我通过故事板将两个视图控制器连接为“show”时,一切正常,但我希望以编程方式全屏显示视图控制器,而不是默认的卡片式显示 从显示视图控制器: @IBAction func startRunTapped(_ sender: Any) { le

我正在构建一个正在运行的应用程序,并试图在点击开始运行按钮时以编程方式呈现一个视图控制器。但是,当我在设置presenting view控制器后点击该按钮时,在按调用顺序展开IBOutlet时,会发现对IBOutlet的任何引用均为零

值得注意的是,当我通过故事板将两个视图控制器连接为“show”时,一切正常,但我希望以编程方式全屏显示视图控制器,而不是默认的卡片式显示

从显示视图控制器:

@IBAction func startRunTapped(_ sender: Any) {
    let inRunVC = CurrentRunVC()
    inRunVC.modalPresentationStyle = .fullScreen
    self.present(inRunVC, animated: true, completion: nil)
}
import UIKit
import MapKit

class CurrentRunVC: LocationVC {


@IBOutlet weak var sliderImageView: UIImageView!
@IBOutlet weak var swipeBGImageView: UIImageView!
@IBOutlet weak var durationLabel: UILabel!
@IBOutlet weak var paceLabel: UILabel!
@IBOutlet weak var distanceLabel: UILabel!
@IBOutlet weak var pauseButton: UIButton!

var startLocation: CLLocation!
var lastLocation: CLLocation!
var timer = Timer()

var runDistance = 0.0
var pace = 0
var counter = 0

override func viewDidLoad() {
    super.viewDidLoad()
    let swipeGesture = UIPanGestureRecognizer(target: self, action: #selector(endRunSwiped(sender:)))
    sliderImageView.addGestureRecognizer(swipeGesture) //error unwrapping here
    sliderImageView.isUserInteractionEnabled = true    // and here
    swipeGesture.delegate = self as? UIGestureRecognizerDelegate
} 

//errors also on any other reference to an IBOutlet
从显示的视图控制器:

@IBAction func startRunTapped(_ sender: Any) {
    let inRunVC = CurrentRunVC()
    inRunVC.modalPresentationStyle = .fullScreen
    self.present(inRunVC, animated: true, completion: nil)
}
import UIKit
import MapKit

class CurrentRunVC: LocationVC {


@IBOutlet weak var sliderImageView: UIImageView!
@IBOutlet weak var swipeBGImageView: UIImageView!
@IBOutlet weak var durationLabel: UILabel!
@IBOutlet weak var paceLabel: UILabel!
@IBOutlet weak var distanceLabel: UILabel!
@IBOutlet weak var pauseButton: UIButton!

var startLocation: CLLocation!
var lastLocation: CLLocation!
var timer = Timer()

var runDistance = 0.0
var pace = 0
var counter = 0

override func viewDidLoad() {
    super.viewDidLoad()
    let swipeGesture = UIPanGestureRecognizer(target: self, action: #selector(endRunSwiped(sender:)))
    sliderImageView.addGestureRecognizer(swipeGesture) //error unwrapping here
    sliderImageView.isUserInteractionEnabled = true    // and here
    swipeGesture.delegate = self as? UIGestureRecognizerDelegate
} 

//errors also on any other reference to an IBOutlet
我已经确认所有IBO插座都连接正确

故事板:


提前感谢

您的视图控制器的输出在情节提要中定义,并在从情节提要加载视图控制器时创建。在此行中初始化新的视图控制器时:

let inRunVC = CurrentRunVC()
然后,系统将查找与视图控制器同名的xib文件,该文件不存在,这意味着它只加载一个没有连接插座的空白视图。所有这些隐式展开的选项现在都为零


或者从按钮到同一视图控制器创建一个新的序列,但创建一个模态表示,或者在序列图像板中添加对显示视图控制器的引用,然后使用当前序列图像板的Instatitate with identifier方法加载它。

您不是在获取当前VC的正确序列图像板实例,而是在创建一个新的序列图像板实例。使用

let runVC = self.storyboard?.instantiateViewController(withIdentifier: "CurrentRunVC") as! CurrentRunVC //set the identifier in the storyboard identity inspector

您没有初始化ViewController并将其与其情节提要版本连接。您需要使用
UIStoryboard(名称:“storyboardName”,bundle:nil)!CurrentRunVC`但对于故事板,您可以选择“以模式呈现”而不是“显示”,然后选择“演示”:“全屏”