2017-03-06 49 views
1

我試圖構建一個使用CoreBluetooth的命令行應用程序。問題是,它不適用於命令行應用程序。Mac上的CoreBluetooth命令行應用程序

我搬到了我的CoreBluetooth代碼(實現CBCentralManagerDelegate協議的類 - 我們稱之爲類myBLEManager)在命令行中的應用項目,以另一臺Mac OS GUI應用程序。

我跑了一些測試,在ViewDidLoad() - 超採樣,我只是一個初始化myBLEManager創建的CBCentralManager在初始化一個實例,然後調用scanForPeripherals

這就是我在CLI和GUI項目中所做的。區別在於,CLI項目中永遠不會調用centralManagerDidUpdateState。但它在GUI Mac應用程序中。

+0

請問您的命令行工具有一個運行的循環? – duskwuff

+0

@duskwuff,我不知道。感謝提示,我會研究它 – kmn

+0

你想發佈一個答案嗎?或者我應該什麼時候完成?由你決定 – kmn

回答

2

大多數Apple框架中的回調都是通過應用程序的主運行循環提供的。如果您的命令行工具沒有運行循環,則無法接收以此方式發送的回調。

如果沒有runloop,用於調用您的回調將是另一個線程,這可能會導致怪異的行爲在沒有預料到的應用程序運行它的框架的唯一途徑。

這足以補充:

let runLoop = RunLoop.current 
let distantFuture = Date.distantFuture 
while running == true && runLoop.run(mode: RunLoopMode.defaultRunLoopMode, before: distantFuture) { 

} 
+0

你能更新的答案,以顯示你的主類的更詳細的例子,你myBLEManager類? – angryip

+0

@angryip我沒有寫程序。 – duskwuff

+0

很公平,我就伸手向筆者 – angryip

相關問題