xcode8.0 swift3.0でこのサイトを参考にBluetooth通信を行いたいと考えています
http://qiita.com/nave421m/items/639a7a043844acda4eff
しかし、ペリフェラル側でアドバタイズを行うタイミングでエラーが発生してしまい原因が分かりません
どなたかアドバイスをお願いします。
エラーが生じるタイミング
swift
1self.peripheralManager.startAdvertising(advertisementData)
エラー内容
Terminating app due to uncaught exception 'Invalid Object', reason: 'Object Optional(0000) is invalid' *** First throw call stack: (0x2453985b 0x35eaedff 0x245397a1 0x241fb2fb 0x241fb433 0x2452d1e9 0x244afbdb 0x241fb3d5 0x241fb249 0x241fb0bb 0x24536d83 0x241fa1ad 0x241fa04d 0x241fa299 0x241fa359 0x241fb99d 0x241fc945 0xb9ef4 0xbaab4 0xbacbc 0x241feeff 0x241faa29 0xa11d17 0xa11d03 0xa167c9 0x244fc535 0x244faa2f 0x2444d0d9 0x2444cecd 0x2d7c2af9 0x286d62dd 0xc1564 0x365fc873) libc++abi.dylib: terminating with uncaught exception of type NSException
コード全体
swift
1import CoreBluetooth 2 3class ViewController: UIViewController, CBPeripheralManagerDelegate { 4 5 var peripheralManager: CBPeripheralManager! 6 var serviceUUID: CBUUID! 7 var characteristic: CBMutableCharacteristic! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 // ペリフェラルマネージャ初期化 13 self.peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil) 14 } 15 16 override func didReceiveMemoryWarning() { 17 super.didReceiveMemoryWarning() 18 // Dispose of any resources that can be recreated. 19 } 20 21 // ペリフェラルマネージャの状態が変化すると呼ばれる 22 func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) { 23 24 print("state: \(peripheral.state)") 25 26 switch peripheral.state { 27 28 case .poweredOn: 29 print("ペリフェラルマネージャーON") 30 self.publishservice() 31 break 32 default: 33 break 34 } 35 } 36 37 38 func publishservice () { 39 40 // サービスを作成 41 let serviceUUID = CBUUID(string: "0000") 42 let service = CBMutableService(type: serviceUUID, primary: true) 43 // キャラクタリスティックを作成 44 let characteristicUUID = CBUUID(string: "0001") 45 //キャラクタリスティックのプロパティ設定(Notify Read Write) 46 let properties: CBCharacteristicProperties = 47 [CBCharacteristicProperties.notify, CBCharacteristicProperties.read, CBCharacteristicProperties.write] 48 //キャラクタリスティックのパーミッション設定 49 let permissions: CBAttributePermissions = 50 [CBAttributePermissions.readable, CBAttributePermissions.writeable] 51 //キャラクタリスティック設定 52 self.characteristic = CBMutableCharacteristic( 53 type: characteristicUUID, 54 properties: properties, 55 value: nil, 56 permissions: permissions) 57 //サービスにキャラクタリスティックを追加 58 service.characteristics = [self.characteristic] 59 // サービスを Peripheral Manager にセット 60 self.peripheralManager.add(service) 61 } 62 63 // サービス追加処理が完了すると呼ばれる 64 func peripheralManager(_ peripheral: CBPeripheralManager, didAdd service: CBService, error: Error?) { 65 if (error != nil) { 66 print("サービス追加失敗! error: \(error)") 67 return 68 } 69 print("サービス追加成功!") 70 71 self.startAdvertise() 72 } 73 74 func startAdvertise() { 75 //アドバタイズメントデータ作成 76 let advertisementData = [ 77 CBAdvertisementDataLocalNameKey: "Test Device", 78 CBAdvertisementDataServiceUUIDsKey: [self.serviceUUID] 79 ] as [String : Any] 80 print("アドバタイズメントデータ作成") 81 82 // アドバタイズ開始 83 self.peripheralManager.startAdvertising(advertisementData) 84 } 85 86 func stopAdvertise () { 87 // アドバタイズ停止 88 self.peripheralManager.stopAdvertising() 89 } 90 91 // アドバタイズ開始処理が完了すると呼ばれる 92 func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) { 93 94 if (error != nil) { 95 print("アドバタイズ開始失敗! error: \(error)") 96 return 97 } 98 99 print("アドバタイズ開始成功!") 100 } 101
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。