- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建一个继承自 NSObject
的类并添加delegate
方法。在我的类里面,我想使用 CBCentralManager 及其委托(delegate)方法。但是委托(delegate)方法没有被调用。这是我的代码 -
这是 VZBluetooth.h
#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
@protocol BluetoothDelegate <NSObject>
@required
-(void)getBluetoothStatus:(NSString*)status;
@end
@interface VZBluetooth : NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>
@property (nonatomic, strong) id<BluetoothDelegate> delegate;
-(void)callBluetooth;
@end
@implementation VZBluetooth
{
NSString *status;
CBCentralManager *ce;
}
@synthesize delegate = _delegate;
-(void)callBluetooth
{
ce = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}
#pragma mark - Bluetooth Delegate
- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
if(central.state == CBCentralManagerStatePoweredOn){
if ([central respondsToSelector:@selector(scanForPeripheralsWithServices:options:)]) {
status = CASE_STATUS_PASS;
}
else{
status = CASE_STATUS_FAIL;
}
}
else{
status = CASE_STATUS_FAIL;
}
if ([self.delegate respondsToSelector:@selector(getBluetoothStatus:)]) {
[self.delegate getBluetoothStatus:status];
}
}
VZBluetooth *blu = [[VZBluetooth alloc]init];
[blu callBluetooth];
blu.delegate = self;
最佳答案
您正在分配您的 VZBluetooth
实例作为局部变量 - 所以一旦该函数退出,它将被释放。这几乎可以肯定是在蓝牙功能被初始化并有机会调用委托(delegate)方法之前。
您需要将实例存储在 strong
上您调用类中的属性。
其他一些建议,您的delegate
位于 VZBluetooth
的属性(property)应该是 weak
而不是 strong
为了防止保留循环,您可以简化 centralManagerDidUpdateState
方法相当 -
- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
status=CASE_STATUS_FAIL;
if(central.state == CBCentralManagerStatePoweredOn){
if ([central respondsToSelector:@selector(scanForPeripheralsWithServices:options:)]) {
status = CASE_STATUS_PASS;
}
}
if ([self.delegate respondsToSelector:@selector(getBluetoothStatus:)]) {
[self.delegate getBluetoothStatus:status];
}
}
关于ios - CBCentralManagerDelegate 没有在 NSObject 中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972961/
我正在尝试在部署目标为 10.12 的 MacOS 上的 Swift 中实现 Apple 用 Objective-C 编写的示例代码。示例可以在这里找到以供引用:Heart Rate Monitor
在我的CBCentralManagerDelegate 协议(protocol)实现中,我有以下功能。 func centralManager(_ central: CBCentralManager,
我创建一个继承自 NSObject 的类并添加delegate方法。在我的类里面,我想使用 CBCentralManager 及其委托(delegate)方法。但是委托(delegate)方法没有被调
在我的应用程序中,当我启动应用程序时,我想检查设备蓝牙是否打开或关闭。一般来说,我们可以在 CBCentralManagerDelegate 中获取它。这是我的代码 var manager:
我正在尝试实现 BLEHandler。 这是我的代码: import CoreBluetooth class BLEHandler : NSObject, CBCentralManagerDelega
我正在尝试初始化中央管理器实例以制作具有蓝牙连接的应用。 这是我的部分代码: class ViewController: UIViewController, CBCentralManagerDeleg
我需要一些建议 我正在尝试实现 Unity BLE Ios 插件。我在尝试在 xcode 中构建项目时遇到问题:未知的类名“CBCentralManagerDelegate”;您指的是“CBCentr
我想制作一个使用蓝牙进行通信的 ios 应用程序。我正在使用 swift。 所以首先我添加了 CoreBluetooth.framework,然后我添加了一个 bridge.h 并将文件添加到系统桥,
我有一个管理 BTLE 通信的 BluetoothManager 类。我可以扫描并连接到 CBPeripheral 并发现服务或特征。我有来自 CBCentralManagerDelegate 和 C
//自定义类 public protocol BluetoothManagerProtocol { var delegate: CBCentralManagerDelegate? {get s
问题 我正在使用 core-bluetooth 以 6 Hz 的速率将传感器数据(64-128 字节的数组)传输到 iPad(第 6 代)。它在 ios 12 中运行良好。在我更新到 ios 13 后
我是一名优秀的程序员,十分优秀!