質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

3005閲覧

IOS、BLEでアドバタイズに失敗する

inui1234

総合スコア12

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/11/26 04:55

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

コーディングミス?

swift

1// let serviceUUID = CBUUID(string: "0000") 2self.serviceUUID = CBUUID(string: "0000")

投稿2016/11/26 10:47

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問