如何在 Objective C 中创建事件循环?

How to create an event loop in Objective C?

我正在尝试使用 CoreBluetooth 模块在命令行 OSX 应用程序中列出所有检测到的蓝牙设备。

到目前为止,我所拥有的是这样的:

@import CoreBluetooth;

@interface MyCentralManager : NSObject<CBCentralManagerDelegate>
- (void) centralManagerDidUpdateState: (CBCentralManager *) central;
- (void) centralManager:(CBCentralManager *) central
    didDiscoverPeripheral:(CBPeripheral *) peripheral
        advertisementData:(NSDictionary *) advertisementData
                     RSSI:(NSNumber *)RSSI;
@end

@implementation MyCentralManager
- (void) centralManagerDidUpdateState: (CBCentralManager *) central
{
    NSLog(@"State changed...");
}

- (void) centralManager:(CBCentralManager *) central
    didDiscoverPeripheral:(CBPeripheral *) peripheral
        advertisementData:(NSDictionary *) advertisementData
                     RSSI:(NSNumber *)RSSI
{
    NSLog(@"Discovered %@", peripheral.name);
}
@end

int main() {
    MyCentralManager* myCentralManager = [[MyCentralManager alloc] init];
    CBCentralManager* cbCentralManager = [[CBCentralManager alloc] initWithDelegate:myCentralManager queue:nil options:nil];

    NSLog(@"Scanning devices now !");

    [cbCentralManager scanForPeripheralsWithServices:nil options:nil];
    sleep(5); // Wait 5 seconds before stopping the scan.
    [cbCentralManager stopScan];

    NSLog(@"Scanning devices ended.");

    return 0;
}

现在这根本不起作用,因为我从来没有得到任何 "State changed...""Discovered ..." 日志输出。

我以前从未真正编写过任何 Objective C 应用程序,所以我可能遗漏了显而易见的东西。如果我不得不猜测我做错了什么,我会假设:

我基本上被困在了这一点上:我没有 GUI,也不想要,但无法找到 运行 事件循环的方法(假设这实际上是什么丢失的)。我该怎么做?

正如我所说,这实际上是我第一次尝试 Objective C,所以不要害怕说出显而易见的事情。

简单地运行线程的运行循环

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:5]];

更多信息here

顺便说一句:您不必声明已在协议中声明的方法。