在 Swift 中的不同 Class 中调用函数(致命错误)?

Call Function in Different Class in Swift(fatal error)?

我有一个 class 用于蓝牙数据接收,我想将接收数据发送到 class UIViewController 并进行实时绘图(CorePlot)

class BluetoothManager: NSObject {
   func dataReceiving(value: [Int]){
      for (var m=0 ; m<5 ; m++){
         dataOne[m] = value[2*m]
         dataTwo[m] = value[2*m+1] 
      }
   MainController().plot(dataOne: [Int], dataTwo: [Int])
}

主控制器class:

class MainController: UIViewController,CPTScatterPlotDataSource {

    @IBOutlet weak var graphView: CPTGraphHostingView!

    private var scatterGraph : CPTXYGraph? = nil
    typealias plotDataType = [CPTScatterPlotField : Double]
    private var dataForPlot = [plotDataType]()

    func plot(dataOne: [Int], dataTwo: [Int]){
        let newGraph = CPTXYGraph(frame: CGRectZero)
        graphView.hostedGraph = newGraph
        ...
    }
}

程序进行到graphView.hostedGraph = newGraph时,会出现致命错误:

unexpectedly found nil while unwrapping an Optional value

我试过在 MainController class 中调用 plot 函数,成功了!

谁能帮我解决这个问题? 谢谢!

您已将 plot 声明为实例方法,并且将其作为 class 方法调用。

您需要更改此行:

func plot(dataOne: [Int], dataTwo: [Int]){

到这一行:

class func plot(dataOne: [Int], dataTwo: [Int]){

如果你需要像你那样调用它

您正在

行中创建 MainController 的新实例
MainController().plot(dataOne: [Int], dataTwo: [Int])

因此 @IBOutlet weak var graphView: CPTGraphHostingView!nil - 因此您的代码崩溃了。

不得按照您目前的方式创建MainController的新实例——要么通过故事板实例化它,要么传入正确的 nib 文件。对于这两种情况,您必须在 IB 中将 MainController 设置为控制器 class 并连接插座。

MainController() 创建 MainController class 的新实例,这与 Interface Builder 中的对象不同。

您需要在 Interface Builder

中引用 MainController 对象