OS X (10.10) および iOS 8 用のアプリを開発して、BLE 周辺機器とメッセージを交換しています。アプリが周辺機器を見つけて接続し、メッセージを送信し、最後に切断して、周辺機器が他のデバイスから自由にアクセスできるようにしたいと考えています。次の特定の重要な状況を除いて、すべて正常に動作します: BLE デバイスをスキャンし、デバイスを見つけましたが、送信するメッセージがないため、デバイスに接続しません。それから私は(範囲外に)立ち去るか、単に周辺機器の電源を切ります。私はまだ CBPeripheral を var に保存しており、それに接続しようとしています。もう一度スキャンを開始できるようにメソッド centralManager:didFailToConnectPeripheral:error: を呼び出したいのですが、何も起こりません。
centralManager:didConnectPeripheral が正常に動作しています。ドキュメントには、Bluetooth 接続要求がタイムアウトしないことが記載されているため、他にどのような問題が接続障害につながる可能性があるのか 疑問に思っていました
func connect(){
if let peripheral = self.peripheralBLE { //Check if the CBPeripheral I was looking for is properly stored
centralManager!.connectPeripheral(peripheral, options: nil)
}
else {
println("Nothing to connect"); //Didn't find any peripheral
}
}
func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!) {
print("connected");
println(peripheral.name);
if (peripheral == nil) {
return;
}
// Create new service class
if (peripheral == self.peripheralBLE) { //if it is the peripheral I was looking for then initialize the service for communication
self.bleService = RFduino(initWithPeripheral: peripheral)
}
connectionStatus = .connected; //update connection status
// Stop scanning for new devices
central.stopScan()
}
func centralManager(central: CBCentralManager!, didFailToConnectPeripheral peripheral: CBPeripheral!, error: NSError!) {
println("Failed to connect peripheral");
if peripheral == self.peripheralBLE{
self.bleService = nil;
self.peripheralBLE = nil;
self.connectionStatus = .disconnected;
}
self.startScanning();
}