swift初学者です。iOSでBLEのペリフェラル側のコーディングをしていますがエラーが出てしまいました。エラー内容は「Value of type "ViewController" has no member "self.characteristic" 」です。存在しないメンバというエラーですが、「let characteristic = CBMutableCharacteristic」の箇所で宣言しているはずなのではないかと思っています。
コード全体
swift
1import CoreBluetooth 2 3class ViewController: UIViewController, CBPeripheralManagerDelegate { 4 5 var peripheralManager: CBPeripheralManager! 6 //サービス・キャラクタリスティックのUUID設定 7 let serviceUUID = CBUUID(string: "BAAE42F6-A34F-497F-A3D3-6B97FD12B086") 8 let characteristicUUID = CBUUID(string: "1565E8AE-E3DD-4F5F-B02B-A304946E2ABE") 9 //ランダムな値を生成しDeviceNameに設定 10 let DeviceName: String = "\(arc4random()%100000)" 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 // Do any additional setup after loading the view, typically from a nib. 15 16 // ペリフェラルマネージャ初期化 17 self.peripheralManager = CBPeripheralManager( 18 delegate: self, 19 queue: nil, 20 options: nil) 21 } 22 23 override func didReceiveMemoryWarning() { 24 super.didReceiveMemoryWarning() 25 // Dispose of any resources that can be recreated. 26 } 27 28 //ペリフェラルマネージャのstate取得メソッド 29 func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager) { 30 switch peripheral.state { 31 case CBPeripheralManagerState.PoweredOn: 32 print("ペリフェラルマネージャがオン") 33 34 publishService() 35 case CBPeripheralManagerState.PoweredOff: 36 print("ペリフェラルマネージャがオフ") 37 38 default: 39 break 40 41 } 42} 43 44 //アドバタイズ開始処理結果取得メソッド 45 func peripheralManagerDidStartAdvertising(peripheral: CBPeripheralManager, error: NSError?) { 46 47 if (error != nil) { 48 print("アドバタイズ開始失敗 error: \(error)") 49 return 50 } 51 52 print("アドバタイズ開始成功") 53 } 54 55 func startAdvertise() { 56 //アドバタイズメントデータの設定 57 var advertisementData = [String:AnyObject]() 58 advertisementData = [CBAdvertisementDataLocalNameKey:DeviceName, 59 CBAdvertisementDataServiceUUIDsKey:[serviceUUID]] 60 //アドバタイズ開始 61 self.peripheralManager.startAdvertising(advertisementData) 62 } 63 64 //サービスとキャラクタリスティックの作成。ペリフェラルマネージャーがオンの時呼ばれるメソッド 65 func publishService() { 66 //サービスの作成 67 let service = CBMutableService(type: serviceUUID, primary: true) 68 //キャラクタリスティックのプロパティ設定 69 let properties: CBCharacteristicProperties = [CBCharacteristicProperties.Notify, CBCharacteristicProperties.Read, CBCharacteristicProperties.Write] 70 //キャラクタリスティックのパーミッション設定 71 let permissions: CBAttributePermissions = [CBAttributePermissions.Readable, CBAttributePermissions.Writeable] 72 73 //キャラクタリスティック設定 74 let characteristic = CBMutableCharacteristic( 75 type: characteristicUUID, 76 properties: properties, 77 permissions: permissions) 78 79 //サービスにキャラクタリスティックの追加 80 service.characteristics = [characteristic] 81 //ペリフェラルにサービス追加 82 self.peripheralManager.addService(service) 83 } 84 85 //サービス追加結果取得、サービス追加処理が完了すると呼ばれる 86 func peripheralManager(peripheral: CBPeripheralManager, didAddService service: CBService, error: NSError?) { 87 88 if (error != nil) { 89 print("サービス追加失敗 error: \(error)") 90 return 91 } 92 93 print("サービス追加成功") 94 } 95 96 //Readリクエストを受け取ると呼ばれるメソッド 97 func peripheralManager(peripheral: CBPeripheralManager, didReceiveReadRequest request: CBATTRequest) { 98 print("リードリクエスト受信") 99 } 100 101 //Writeリクエストを受け取ると呼ばれるメソッド 102 func peripheralManager(peripheral: CBPeripheralManager, 103 didReceiveWriteRequests requests: [CBATTRequest]//配列として入っている 104 ) { 105 print("ライトリクエスト受信") 106 } 107 108 //Notify開始リクエストを受け取る 109 func peripheralManager(peripheral: CBPeripheralManager, central: CBCentral, didSubscribeToCharacteristic characteristic: CBCharacteristic) { 110 111 print("Notify開始リクエストを受信") 112 113 } 114 115 //Notify停止リクエストを受け取る 116 func peripheralManager(peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFromCharacteristic characteristic: CBCharacteristic) { 117 print("Notify停止リクエストを受信") 118 } 119 func answer(str: String) { 120 self.peripheralManager.updateValue( 121 str2data(str), 122 forCharacteristic: self.characteristic, 123 onSubscribedCentrals: nil) 124 } 125 126 func stopAdvertise() { 127 peripheralManager.stopAdvertising() 128 } 129 130 //StringをNSDataに変換するメソッド 131 func str2data(str:String) -> NSData { 132 return str.dataUsingEncoding(NSUTF8StringEncoding)! 133 } 134 //NSDataをStringに変換するメソッド 135 func data2str(data: NSData) -> String { 136 return String(data:data, encoding:NSUTF8StringEncoding)! 137 } 138}
エラー箇所
swift
1 func answer(str: String) { 2 self.peripheralManager.updateValue( 3 str2data(str), 4 forCharacteristic: self.characteristic, //この行でエラー 5 onSubscribedCentrals: nil)

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。