【发布时间】:2015-10-13 03:20:14
【问题描述】:
我不确定为什么此代码无法构建,并且错误消息似乎很神秘。
代码:
var centralManager: CBCentralManager!;
var nrf8001Peripheral: CBPeripheral!;
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// initialize centralManager
self.centralManager = CBCentralManager(delegate: self, queue: nil);
// start scanning for device
self.centralManager.scanForPeripheralsWithServices([UART_SERVICE_UUID], options:nil);
}
func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData advertisementData: [NSObject : AnyObject]!, RSSI RSSI: NSNumber) {
//print out the name of the scanned peripheral
print("Discovered \(peripheral.name)")
//print out the UUID of the scanned peripheral
print("NSUUID string \(peripheral.identifier.UUIDString)")
//stop scanning when found
self.centralManager.stopScan()
//connect when found
self.centralManager.connectPeripheral(peripheral, options:nil);
}
我从 XCode 编译器收到的错误是:
“由方法'centralManager(:didDiscoverPeripheral:advertisementData:RSSI:)'提供的Objective-C方法'centralManager:didDiscoverPeripheral:advertisementData:RSSI:'与可选要求方法'centralManager(:didDiscoverPeripheral)冲突:advertisementData:RSSI:)' 在协议 'CBCentralManagerDelegate'"
通过查看 CoreBluetooth 文档,方法语法和参数似乎是正确的,并且参数的可选性直接从规格表中复制:https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManagerDelegate_Protocol/#//apple_ref/occ/intfm/CBCentralManagerDelegate/centralManager:didDiscoverPeripheral:advertisementData:RSSI:
任何帮助将不胜感激!谢谢
根据 cmets:
- 使用 XCode 7 测试版
-
当我将函数声明更改为:
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, AdvertisementData AdvertisementData: [NSObject : AnyObject], RSSI RSSI: NSNumber)
我仍然遇到同样的构建错误。
-
我的 centralManagerDidUpdateState:方法是
func centralManagerDidUpdateState(central: CBCentralManager) { print("centralManagerDidUpdateState:"); switch (central.state) { case .PoweredOff: print("CBCentralManagerStatePoweredOff"); case .Resetting: print("CBCentralManagerStateResetting"); case .PoweredOn: print("CBCentralManagerStatePoweredOn"); //scan for peripheral devices self.centralManager.scanForPeripheralsWithServices([UART_SERVICE_UUID], options:nil); case .Unauthorized: print("CBCentralManagerStateUnauthorized"); case .Unsupported: print("CBCentralManagerStateUnsupported"); default: print("CBCentralManagerStateUnknown"); } }
【问题讨论】:
-
您使用的是哪个 Xcode 版本?如果你使用的是 7,这个方法的参数应该都是非可选的。
-
可能你忘记实现 centralManagerDidUpdateState: 方法
-
@0x7fffffff 谢谢,取出所有函数声明中的所有选项,但仍然无法构建。
-
@jinhualio 也有上面显示的 centralManagerDidUpdateState 方法。
-
你有两个在这个类中声明的签名相同的方法吗?有没有可能是你复制粘贴了忘记删除旧的?
标签: ios swift core-bluetooth