Ios CBPeripheralManager在被调用时将不会开机

Ios CBPeripheralManager在被调用时将不会开机,ios,iphone,objective-c,bluetooth,core-bluetooth,Ios,Iphone,Objective C,Bluetooth,Core Bluetooth,当我调用这个if语句来检查外围设备状态时,我的代码一直被卡住。当我从更改操作时!=to==它通过并执行NSLog,但调试器表示外围设备管理器未打开。我如何纠正这个问题 我首先在viewDidLoad方法中打开外围设备管理器: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // Start up the CBPe

当我调用这个if语句来检查外围设备状态时,我的代码一直被卡住。当我从更改操作时!=to==它通过并执行NSLog,但调试器表示外围设备管理器未打开。我如何纠正这个问题

我首先在viewDidLoad方法中打开外围设备管理器:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

// Start up the CBPeripheralManager
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];

NSLog(@"viewDidLoad");
}
然后我调用PeripheralManagerDipDateState方法:

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheralManager
{
    // Opt out from any other state
if (self.peripheralManager.state != CBPeripheralManagerStatePoweredOn)
{
    return;
}

// We're in CBPeripheralManagerStatePoweredOn state...
NSLog(@"self.peripheralManager powered on.");

// ... so build our service.


// Then the service
CBMutableService *transferService = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID] primary:YES];


// And add it to the peripheral manager
[self.peripheralManager addService:transferService];
}
由于按下iAction/按钮,我在程序的后面调用了StartAversising命令:

- (IBAction)advertise:(id)sender
{
if(self.peripheralManager.state == CBPeripheralManagerStatePoweredOn)
{
[self.peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] }];
[self.peripheralManager startAdvertising:@{ CBAdvertisementDataTxPowerLevelKey : @(YES)}];
}
}

通过在检查外围设备状态之后而不是之前调用StartAvertising与此错误有任何关系?

您说“我调用
PeripheralManagerDipDateState:
方法”。您是在调用它,还是说它是由
CBPeripheralManager
调用的?在
外围设备管理器rdidupdatestate:
中,
self.peripherandmanager.state
的值是多少?你检查蓝牙是否开启了吗?这只是程序中的一个方法:-(无效)PeripheralManagerDipDateState:(CBPeripheralManager*)如果我不调用它,它不会被执行吗?你不会调用这个方法。当外围设备管理器的状态发生变化时,
cbperipheraldmanager
实例(即核心蓝牙)调用它。