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

时间:2015-11-19 09:28:45

标签: ios swift core-plot

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

    // change Jetty Logger

    Properties p = new Properties();
    p.setProperty("org.eclipse.jetty.LEVEL", "OFF");
    org.eclipse.jetty.util.log.StdErrLog.setProperties(p);

MainController类:

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

  

在解包可选值时意外发现nil

我试过在MainController类中调用plot函数,它已经工作了!

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

3 个答案:

答案 0 :(得分:1)

您正在行

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

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

必须以您当前的方式创建MainController的新实例 - 通过故事板实例化它,或传入正确的nib文件。对于这两种情况,您必须将MainController设置为IB中的控制器类并连接插座。

答案 1 :(得分:0)

您已将plot声明为实例方法,并将其称为类方法。

您需要更改此行:

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

到这一行:

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

如果你需要像你那样打电话

答案 2 :(得分:0)

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

您需要在Interface Builder

中引用MainController对象