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

时间:2015-08-31 01:13:53

标签: objective-c macos bluetooth event-loop

我正在尝试使用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的第一次尝试,所以不要害怕陈述显而易见的事情。

1 个答案:

答案 0 :(得分:2)

只需运行线程的运行循环

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

更多信息here

BTW:您不必声明协议中已声明的方法。