我有一个用于蓝牙数据接收的类,我想将接收的数据发送到类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])
}


MainController类:

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时,将出现致命错误:


  展开可选值时意外发现nil


我试过在MainController类中调用plot函数,它确实起作用了!

有人可以帮我解决这个问题吗?
谢谢!

最佳答案

您正在该行中创建MainController的新实例

MainController().plot(dataOne: [Int], dataTwo: [Int])


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

您不得以当前方式创建MainController的新实例-通过情节提要实例化该实例,或传递正确的nib文件。对于这两种情况,都必须在IB中将MainController设置为控制器类,然后连接插座。

关于ios - 在Swift中的不同类中调用函数(致命错误)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33799854/

10-13 08:20