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

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

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

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

Xcode

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

Q&A

解決済

2回答

3290閲覧

xcode8.0でtableviewを利用してBLEの情報を表示する方法

sandalwalk

総合スコア77

Bluetooth

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

Xcode

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

1グッド

1クリップ

投稿2016/10/14 09:01

xcode8.0で周囲のbluetoothのUUID情報をtableviewに表示したいのですが、BluetoothのUUID情報は受信できているのですが、tableviewに表示させることができません。コードは以下の様に書いています。

import UIKit import CoreBluetooth class ViewController: UIViewController, UITableViewDelegate, CBCentralManagerDelegate, UITableViewDataSource { var centralManager: CBCentralManager! var peripherals:[CBPeripheral] = [] var manager:CBCentralManager? = nil //var myUuids:NSMutableArray = NSMutableArray() var myUuids:[String] = [] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.centralManager = CBCentralManager(delegate: self, queue: nil, options: nil) } // ボタン押しでCoreBluetoothを起動させる @IBAction func scanButton(_ sender: AnyObject) { self.centralManager = CBCentralManager(delegate: self, queue: nil, options: nil) myUuids = [] } // centralManagerの状態を受信 func centralManagerDidUpdateState(_ central: CBCentralManager) { print(central.state) switch central.state { case .poweredOff: print("BLE Powered OFF") case .poweredOn: print("BLE Powered ON") central.scanForPeripherals(withServices: nil, options: nil) case .resetting: print("BLE Resetting") case .unauthorized: print("BEL Not Authorized") case .unknown: print("Unknow BLE") default: print("not supported") } } // peripheral 検索結果の受信 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { if(!peripherals.contains(peripheral)) { //peripherals.append(peripheral) myUuids.append(peripheral.identifier.uuidString) print("RSSI: \(RSSI)") print("myUuids: \(myUuids)") //print("myUuids_count: \(myUuids.count)") } print("Peripheral(UUID): \(peripheral.identifier)") //print("Peripherals: \(peripherals)") } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("myUuids_count: \(myUuids.count)") return myUuids.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) cell.textLabel?.text = "\(myUuids[indexPath.row])" return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

また、その他の設定はこのスクリーンショットの様にしています。スクリーンショット

この結果、以下の様にUUID等得ることはできているのですが、tableviewには何も表示されません。

2016-10-14 09:13:13.391052 BLE_tableView[7654:2308859] [CoreBluetooth] XPC connection invalid CBManagerState BLE Powered ON RSSI: -55 myUuids: ( "7D7D584A-F9E0-44E6-AF1D-9117E5F79697" ) myUuids_count: 1 Peripheral(UUID): 7D7D584A-F9E0-44E6-AF1D-9117E5F79697 RSSI: -72 myUuids: ( "7D7D584A-F9E0-44E6-AF1D-9117E5F79697", "7D7D584A-F9E0-44E6-AF1D-9117E5F79697" ) myUuids_count: 2 Peripheral(UUID): 7D7D584A-F9E0-44E6-AF1D-9117E5F79697

プログラミング初心者のため初歩的な質問内容なのかもしれませんが、アドバイス頂けると幸いです。よろしくお願いいたします。

OKstyle-Tokyo👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

uuidのアペンド後に、テーブルをリロードしてみるとどうでしょうか。

swift

1myUuids.append(peripheral.identifier.uuidString) 2/* 追加 */ 3DispatchQueue.main.async(execute: { 4 self.tableView.reloadData() 5}) 6

投稿2016/10/14 18:32

fromageblanc

総合スコア2724

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

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

sandalwalk

2016/10/16 05:25

reloadData()を試してみましたが、ambiguous reference to member "tableView(_:numberOfRowsInSection section)" というエラーが出てしまい動作しませんでした。
sandalwalk

2016/10/16 05:28

BLEからはRSSI, UUID等を受信しているのですが、用意している配列に上手く格納されていない雰囲気です。 BLEから受け取ったデータを配列に入れるには必要な手順があるでしょうか?
fromageblanc

2016/10/16 07:40

あ、tableViewのところは、ストーリーボードで配置したテーブルに紐付いているインスタンス変数名に書き換えてください。別ファイルで定義してますよね? @IBOutlet var xxxxxxx:UITableView であれば、 self.xxxxxxx.reloadData() に。 それでダメなら次を確認してみてください。 ・ストーリーボード上のテーブル部品とインスタンス変数の紐付け(Outlet接続)はokか ・デリゲートのコードはあるか (テーブルのインスタンス.delegate = self) ・BLE関連のコードをコメントアウト、myUuidsをハードコードしてテーブルに展開されるか試してみる  var myUuids:[String] = ["aaaaa","bbbbbb","cccccc"]
sandalwalk

2016/10/16 12:14

self.xxxx.reloadData()で動作しました。 ありがとうございました!!
guest

0

これは必要なのですか?

swift

1 myUuids = []

投稿2016/10/14 09:34

fromageblanc

総合スコア2724

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

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

sandalwalk

2016/10/14 10:30

この一文が無いとボタンを押す度に同じUUIDが配列に追加されてしますので、ボタンを押した際に一旦配列を空にしている(つもり)です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問