Swift言語(v2.2)を使用してXCode(v7.3)で作業を開始しました。ターゲットBLEに接続する単一ページアプリケーションを作成しようとしていますボタンを押してBluetoothManagerDelegateクラス内のViewControllerボタンにアクセス
私は、以下のウェブサイト上のコアのBluetoothのフレームワークの簡単なチュートリアルを追っ:これらのクラス定義を挿入してのインスタンスを宣言した後
class BLEManager{
var centralManager:CBCentralManager
var bleHandler:BLEHandler
init() {
self.bleHandler = BLEHandler()
self.centralManager = CBCentralManager(delegate: self.bleHandler, queue: nil
}
}
class BLEHandler : NSObject, CBCentralManagerDelegate {
override init() {
super.init()
}
func CentralManagerDidUpdateState(central: CBCentralManager) {
var status:String
switch(central.state) {
case .PoweredOn
status = "Powered On"
//ble_show()
case .PoweredOff
status = "Powered Off"
//ble_hide()
}//Note: several cases have been omitted to reduce length
print(status)
}
}
var bleManager = BLEManager()
:私は以下のクラス構造を作成していたhttp://hatemfaheem.blogspot.com/2014/12/how-would-you-scan-for-nearby-ble.html
私のViewController.swiftファイルのViewControllerクラス内のBLEManagerクラスでは、アプリケーションを実行しているときに私のiPhoneでBluetoothのオンとオフを切り替えると、コンソールに「Powered On」と「Powered Off」の文字列が表示されます。
上記のコードで "ble_show()"と "ble_hide"という名前の関数を呼び出すと、エラーが発生するという問題があります(コメントアウトされている理由です)。私は、これらの関数が最も重要なViewControllerクラスのメンバであるため、ネストされたクラスBLEHandlerからそれらの関数を呼び出すことができないという問題があると想定しています。
ble_show()およびble_hide()関数は、ボタンに「隠し」フラグを設定するだけで、ユーザーに表示されます。これらのボタンは、ユーザーがBluetoothをオンにしている場合にのみ使用可能になります。したがって、BLEHandlerクラスは、ViewControllerクラスで宣言されているこれらのボタンにアクセスする必要がありますが、その方法を理解していないようです。私はすべての関数の宣言とUIButton宣言をBLEHandlerクラスの中で動かそうとしましたが、Xcodeはそれを本当に気に入らなかったのです。
私の問題の1つは、Swift、XCode、およびCore Bluetoothフレームワークをすべて同時に学習しているため、誰かが私ができることをできるだけ徹底的に試していることを説明することができれば、 。私は、main()(現在ViewControllerクラスを扱っている方法です)としてクラスを使用するのではなく、単純なmain()関数を使って環境をプログラミングするのに使います。
私が正しく理解している場合、CBCentralManagerDelegateは、Bluetoothステータスの変更が発生するたびに、自分のCentralManagerDidUpdateState()メンバー関数を呼び出すイベントに自分のコードの一部を登録しています。しかし、これらのイベントが発生したときに何かを行うように私のViewControllerにどのように伝えることができますか?
だから私は、コードあなたを追加しましたいくつかのエラーが発生します。私は '!' 'userInfo 'の後ろに' if let status = notification.userInfo ["statusString"]?文字列{'であり、' aDict '(未解決の識別子の使用)という行に 'notificationCenter.postNotificationName(" bleStateChange "、object:nil、userInfo:aDict)'という問題があります。私はこのコードで何が起こっているのか本当に理解していないので、ここで何が起こっているのかについていくつかの詳細を提示すると役に立ちます – marco
私は今それを理解したと思います。私はそれが未使用の辞書であることを知った後、私は 'aDict'をuserInfo(上記の行で宣言されている)に置き換えました。そして今、私はbluetoothChanged()funcのswitch文を通して必要な振る舞いを得ることができました。お手伝いありがとう。 – marco
申し訳ありませんが、私のプレイグラウンドからのカット/ペーストエラーでした。 – Paulw11