Swift 언어 (v2.2)를 사용하여 XCode (v7.3)로 작업하기 시작했으며 대상 BLE에 연결할 단일 페이지 앱을 작성하려고합니다. 버튼을 눌러서 http://hatemfaheem.blogspot.com/2014/12/how-would-you-scan-for-nearby-ble.htmlBluetoothManagerDelegate 클래스 내의 ViewController 버튼에 액세스
나 다음 클래스 구조를 생성했다 : 그 클래스 정의를 삽입의 인스턴스를 선언 한 후
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()
을
나는 다음 웹 사이트에서 코어 블루투스 프레임 워크에 관한 짧은 튜토리얼을 따라 내 ViewController.swift 파일의 ViewController 클래스에있는 BLEManager 클래스에서 응용 프로그램을 실행하는 동안 내 iPhone에서 Bluetooth를 켜고 끄는 것처럼 콘솔에 "Powered On"및 "Powered Off"라는 문자열이 표시됩니다.위의 코드에서 "ble_show()"및 "ble_hide"라는 함수를 호출 할 때 오류가 발생합니다 (주석 처리 된 이유입니다). 이 함수는 중요한 ViewController 클래스의 멤버이기 때문에 문제가 있다고 가정하고 중첩 클래스 내부에서 이러한 함수를 호출 할 수 없습니다. BLEHandler.
ble_show() 및 ble_hide() 함수는 단추에 "숨겨진"플래그를 설정하여 사용자에게 표시합니다. 사용자가 블루투스를 켰을 때만이 버튼을 사용할 수있게하려고합니다. 그래서 BLEHandler 클래스는 어떻게 든 ViewController 클래스에서 선언 된 이러한 버튼에 액세스해야하지만, 그 일을하는 방법을 이해하지 못하는 것 같습니다. BLEHandler 클래스 내에서 모든 함수 선언과 UIButton 선언을 옮겨 보았습니다.하지만 Xcode는 그렇게했을 때 정말 좋아하지 않았습니다.
일부 문제는 Swift, XCode 및 Core Bluetooth 프레임 워크에 대해 동시에 배우고 있기 때문에 가능한 한 철저히 시도하고있는 것을 달성하는 방법을 설명 할 수 있다면 매우 도움이 될 것입니다. . 나는 주() (현재 ViewController 클래스를 다루고있는 방법)로 클래스를 사용하는 대신에 간단한 main() 함수로 환경을 프로그래밍하는 데 익숙하다.
올바르게 이해하면 CBCentralManagerDelegate는 블루투스 상태가 변경 될 때마다 내 CentralManagerDidUpdateState() 멤버 함수를 호출하는 이벤트에 내 코드 일부를 등록합니다. 하지만 어떻게 이러한 이벤트가 발생할 때 뭔가를 내 ViewController 말할 수 있습니까?
그래서 코드를 당신에게 추가 한 : 당신의
BLEManager
당신은 통지를 게시 할 필요을 제공되며 몇 가지 오류가 발생합니다. 나에게 '!' 'userInfo'다음에 :'if let status = notification.userInfo [ "statusString"]? String {'그리고 그것은 'aDict'(미해결 식별자 사용)라는 줄에'notificationCenter.postNotificationName ("bleStateChange", object : nil, userInfo : aDict)'문제가 있습니다.나는이 코드에서 무슨 일이 벌어지고 있는지 정말로 이해하지 못하기 때문에 여기에 무슨 일이 일어나고 있는지에 대한 세부 사항을 제공하는 것이 도움이 될 것입니다. – marco
나는 그것을 지금 생각했다고 생각합니다. 사용하지 않는 사전이었고 이제는 bluetoothChanged() func의 switch 문을 통해 원하는 동작을 얻을 수있게 된 후 'aDict'를 userInfo (위의 줄에서 선언)로 바꿨습니다. 도와 주셔서 감사합니다. – marco
죄송합니다. 내 놀이터에서 잘라 내기/붙여 넣기 오류가 발생했습니다. – Paulw11