我有一个用于蓝牙数据接收的类,我想知道将接收数据发送到类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函数,它已经工作了!
有人可以帮我解决这个问题吗? 谢谢!
答案 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
对象