Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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 OBD2Kit Swift示例可以';t打字,继续得到零_Ios_Objective C_Swift_Swift2_Obd Ii - Fatal编程技术网

Ios OBD2Kit Swift示例可以';t打字,继续得到零

Ios OBD2Kit Swift示例可以';t打字,继续得到零,ios,objective-c,swift,swift2,obd-ii,Ios,Objective C,Swift,Swift2,Obd Ii,因为没有使用OBD2Kit和Swift的示例代码,所以我将其分叉并用作pod 我翻译了一些OBJ-C示例代码,但似乎无法将FLWiFiScanTool降级为ELM327类型。为什么我总是得零分 import UIKit import OBD2Kit class ViewController: UIViewController, FLScanToolDelegate { @IBOutlet weak var hostIpAddress: UITextField! var sc

因为没有使用OBD2Kit和Swift的示例代码,所以我将其分叉并用作pod

我翻译了一些OBJ-C示例代码,但似乎无法将FLWiFiScanTool降级为ELM327类型。为什么我总是得零分

import UIKit
import OBD2Kit

class ViewController: UIViewController, FLScanToolDelegate {

    @IBOutlet weak var hostIpAddress: UITextField!

    var scanTool: ELM327!

    @IBOutlet weak var statusLabel: UILabel!
    @IBOutlet weak var scanToolLabel: UILabel!
    @IBOutlet weak var rpmLabel: UILabel!
    @IBOutlet weak var speedLabel: UILabel!
    @IBOutlet weak var tempLabel: UILabel!
    var scanning = false

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        self.hostIpAddress.text = "192.168.0.10"
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func scanButton(sender: UIButton) {
        if !scanning {
            startScan()
        } else {
            stopScan()
        }
    }

    func startScan() {
        if let scanTool = ELM327(host: self.hostIpAddress.text!, andPort: 35000) {
            self.statusLabel.text = "Initializing..."
            scanTool.useLocation = true
            scanTool.delegate = self
            scanTool.startScanWithSensors({() -> [AnyObject] in
                dispatch_async(dispatch_get_main_queue(), {() -> Void in
                    self.statusLabel.text = "Scanning..."
                    self.scanToolLabel.text = scanTool.scanToolName
                })

//                let sensors: [AnyObject] = [    OBD2Sensor.SensorEngineRPM as! AnyObject,
//                                                OBD2Sensor.SensorVehicleSpeed as! AnyObject,
//                                                OBD2Sensor.SensorOxygenSensorsPresent as! AnyObject    ]

                let sensors: [AnyObject] = [    0x0C,
                                                0x0D,
                                                0x13    ]
                return sensors
            })
            self.scanTool = scanTool
            print("So far succesfull")
            scanning = !scanning
        } else {
            self.statusLabel.text = "Not working"
        }
    }

    func stopScan() {
        statusLabel.text = "Stopped"
        let scanTool: ELM327 = self.scanTool
        scanTool.cancelScan()
        scanTool.sensorScanTargets = nil
        scanTool.delegate = nil
        scanning = !scanning
    }

    // MARK: - FLScanToolDelegate


    func scanTool(scanTool: FLScanTool, sensor: FLECUSensor) {
        var sensorLabel: UILabel? = nil
        switch sensor.pid {

        case OBD2Sensor.SensorEngineRPM:
            sensorLabel = self.rpmLabel

        case OBD2Sensor.SensorVehicleSpeed:
            sensorLabel = self.speedLabel

        default:
            sensorLabel = self.tempLabel
        }

        self.showSensorValue(sensor, onLabel: sensorLabel!)
    }

    func showSensorValue(sensor: FLECUSensor, onLabel label: UILabel) {
        let sensorValue: String = "\(sensor.valueStringForMeasurement1(false)) \(sensor.imperialUnitString)"
        dispatch_async(dispatch_get_main_queue(), {() -> Void in
            label.text = sensorValue
        })
    }

}
编辑1:


我现在已经可以扫描工具了,因为ELM327是FLWiFiScanTool,而不是相反。我可以得到工具名,这样它就可以连接了,但似乎无法得到传感器的输出。

我设法找到了答案。预期的传感器阵列应该是NSNUMBER中的一个,因此我将传感器单元铸造为NSNUMBER。 我还错过了scanTool函数中的didUpdateSensor部分

一定要使用公制,在我的情况下,这更可靠。(我的车也使用公制,也许这就是原因。)


scanToolWithHost
能否失败?什么是
FLWifiScanTool
返回?请从您的问题中删除所有“已解决”部分,并将您的解决方案作为答案发布。谢谢。你可以先问然后回答你自己的问题,只是在问题部分不要两个都做。我已经将你的问题回滚到上一个“未解决”版本,因为有一个误解。我的意思是,你应该使用“你的答案”框发布你的解决方案。一个问题应该是一个问题;答案在问答部分,而不是问题中。谢谢
import UIKit
import OBD2Kit

class ViewController: UIViewController, FLScanToolDelegate {
    var scanTool: ELM327!

    @IBOutlet weak var statusLabel: UILabel!
    @IBOutlet weak var scanToolLabel: UILabel!
    @IBOutlet weak var rpmLabel: UILabel!
    @IBOutlet weak var speedLabel: UILabel!
    @IBOutlet weak var tempLabel: UILabel!
    var scanning = false

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func scanButton(sender: UIButton) {
        if !scanning {
            startScan()
        } else {
            stopScan()
        }
    }

    func startScan() {
        if let scanTool = ELM327(host: "192.168.0.10", andPort: 35000) {
            self.statusLabel.text = "Initializing..."
            scanTool.useLocation = true
            scanTool.delegate = self
            scanTool.startScanWithSensors({() -> [AnyObject] in
                dispatch_async(dispatch_get_main_queue(), {() -> Void in
                    self.statusLabel.text = "Scanning..."
                    self.scanToolLabel.text = scanTool.scanToolName
                })

                let sensors: [AnyObject] = [ OBD2Sensor.SensorEngineRPM as NSNumber, OBD2Sensor.SensorVehicleSpeed as NSNumber, OBD2Sensor.SensorOxygenSensorsPresent as NSNumber ]

                return sensors
            })
            self.scanTool = scanTool
            print("So far succesfull")
            scanning = !scanning
        } else {
            self.statusLabel.text = "Not working"
        }
    }

    func stopScan() {
        statusLabel.text = "Stopped"
        let scanTool: ELM327 = self.scanTool
        scanTool.cancelScan()
        scanTool.sensorScanTargets = nil
        scanTool.delegate = nil
        scanning = !scanning
    }

    // MARK: - FLScanToolDelegate

    func scanTool(scanTool: FLScanTool!, didUpdateSensor sensor: FLECUSensor!) {
        var sensorLabel: UILabel? = nil
        switch sensor.pid {

        case OBD2Sensor.SensorEngineRPM:
            sensorLabel = self.rpmLabel

        case OBD2Sensor.SensorVehicleSpeed:
            sensorLabel = self.speedLabel

        default:
            sensorLabel = self.tempLabel
        }

        self.showSensorValue(sensor, onLabel: sensorLabel!)
    }

    func showSensorValue(sensor: FLECUSensor, onLabel label: UILabel) {
        let sensorValue: String = "\(sensor.valueStringForMeasurement1(true)) \(sensor.metricUnitString)"
        dispatch_async(dispatch_get_main_queue(), {() -> Void in
            label.text = sensorValue
        })
    }

}