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)
まだ回答がついていません
会員登録して回答してみよう