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

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

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

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

解決済

Value of type "A" has no member "B" の原因が分かりません

inui1234
inui1234

総合スコア12

Bluetooth

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

1回答

0評価

0クリップ

14980閲覧

投稿2016/06/25 09:51

swift初学者です。iOSでBLEのペリフェラル側のコーディングをしていますがエラーが出てしまいました。エラー内容は「Value of type "ViewController" has no member "self.characteristic" 」です。存在しないメンバというエラーですが、「let characteristic = CBMutableCharacteristic」の箇所で宣言しているはずなのではないかと思っています。

コード全体

swift

import CoreBluetooth class ViewController: UIViewController, CBPeripheralManagerDelegate { var peripheralManager: CBPeripheralManager! //サービス・キャラクタリスティックのUUID設定 let serviceUUID = CBUUID(string: "BAAE42F6-A34F-497F-A3D3-6B97FD12B086") let characteristicUUID = CBUUID(string: "1565E8AE-E3DD-4F5F-B02B-A304946E2ABE") //ランダムな値を生成しDeviceNameに設定 let DeviceName: String = "\(arc4random()%100000)" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // ペリフェラルマネージャ初期化 self.peripheralManager = CBPeripheralManager( delegate: self, queue: nil, options: nil) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //ペリフェラルマネージャのstate取得メソッド func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager) { switch peripheral.state { case CBPeripheralManagerState.PoweredOn: print("ペリフェラルマネージャがオン") publishService() case CBPeripheralManagerState.PoweredOff: print("ペリフェラルマネージャがオフ") default: break } } //アドバタイズ開始処理結果取得メソッド func peripheralManagerDidStartAdvertising(peripheral: CBPeripheralManager, error: NSError?) { if (error != nil) { print("アドバタイズ開始失敗 error: \(error)") return } print("アドバタイズ開始成功") } func startAdvertise() { //アドバタイズメントデータの設定 var advertisementData = [String:AnyObject]() advertisementData = [CBAdvertisementDataLocalNameKey:DeviceName, CBAdvertisementDataServiceUUIDsKey:[serviceUUID]] //アドバタイズ開始 self.peripheralManager.startAdvertising(advertisementData) } //サービスとキャラクタリスティックの作成。ペリフェラルマネージャーがオンの時呼ばれるメソッド func publishService() { //サービスの作成 let service = CBMutableService(type: serviceUUID, primary: true) //キャラクタリスティックのプロパティ設定 let properties: CBCharacteristicProperties = [CBCharacteristicProperties.Notify, CBCharacteristicProperties.Read, CBCharacteristicProperties.Write] //キャラクタリスティックのパーミッション設定 let permissions: CBAttributePermissions = [CBAttributePermissions.Readable, CBAttributePermissions.Writeable] //キャラクタリスティック設定 let characteristic = CBMutableCharacteristic( type: characteristicUUID, properties: properties, permissions: permissions) //サービスにキャラクタリスティックの追加 service.characteristics = [characteristic] //ペリフェラルにサービス追加 self.peripheralManager.addService(service) } //サービス追加結果取得、サービス追加処理が完了すると呼ばれる func peripheralManager(peripheral: CBPeripheralManager, didAddService service: CBService, error: NSError?) { if (error != nil) { print("サービス追加失敗 error: \(error)") return } print("サービス追加成功") } //Readリクエストを受け取ると呼ばれるメソッド func peripheralManager(peripheral: CBPeripheralManager, didReceiveReadRequest request: CBATTRequest) { print("リードリクエスト受信") } //Writeリクエストを受け取ると呼ばれるメソッド func peripheralManager(peripheral: CBPeripheralManager, didReceiveWriteRequests requests: [CBATTRequest]//配列として入っている ) { print("ライトリクエスト受信") } //Notify開始リクエストを受け取る func peripheralManager(peripheral: CBPeripheralManager, central: CBCentral, didSubscribeToCharacteristic characteristic: CBCharacteristic) { print("Notify開始リクエストを受信") } //Notify停止リクエストを受け取る func peripheralManager(peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFromCharacteristic characteristic: CBCharacteristic) { print("Notify停止リクエストを受信") } func answer(str: String) { self.peripheralManager.updateValue( str2data(str), forCharacteristic: self.characteristic, onSubscribedCentrals: nil) } func stopAdvertise() { peripheralManager.stopAdvertising() } //StringをNSDataに変換するメソッド func str2data(str:String) -> NSData { return str.dataUsingEncoding(NSUTF8StringEncoding)! } //NSDataをStringに変換するメソッド func data2str(data: NSData) -> String { return String(data:data, encoding:NSUTF8StringEncoding)! } }

エラー箇所

swift

func answer(str: String) { self.peripheralManager.updateValue( str2data(str), forCharacteristic: self.characteristic, //この行でエラー onSubscribedCentrals: nil)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Bluetooth

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

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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