gpt4 book ai didi

ios - 子类 CBPeripheral 未转换为正确的类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:12 25 4
gpt4 key购买 nike

我有一个类是 CBPeripheral 的子类。这样我就可以向 CBPeripheral 添加其他属性。

在 centralManager 委托(delegate)方法 didDiscoverPeripheral 中,我将发现的外围设备转换为我自己的 CBPeripheral 子类,然后尝试设置我的属性。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
SCPCBPeripheral *discoveredPeripheral = (SCPCBPeripheral *)peripheral;
[discoveredPeripheral setCoreBluetoothManager:self];
}

遗憾的是,这不会转换为 SCPBPeripheral 并且会出现“无法识别的选择器发送到实例”的错误。

有人知道为什么会这样吗?

如果有人想知道这是我的 SCPCBPeripheral .h

#import <CoreBluetooth/CoreBluetooth.h>

@class SCPCoreBluetoothCentralManager;

@interface SCPCBPeripheral : CBPeripheral

@property (nonatomic, strong) SCPCoreBluetoothCentralManager *coreBluetoothManager;

@end

谢谢

最佳答案

您不能只将 CBPeripheral 转换为您的自定义类。将它强制转换为该类不会强制真实对象知道如何响应您的自定义方法。您应该改为创建一个自定义 init 方法并将 CBPeripheral 存储在您的 SPCBPeripheral 实例中。从那时起,您应该使用 SPCBPeripheral 方法,并且该对象将真正知道如何响应(因为它实际上属于该类型)。

您实际需要实现的应该如下所示:

SPCBPeripheral *peripheral = [[SPCBPeripheral alloc]initWithDiscoveredPeripheral:peripheral];
[peripheral setCoreBluetoothManager:self];

根据您的评论,您可以使用如下内容编写您的 init 方法:

-(id)initWithDiscoveredPeripheral:(CBPeripheral*)peripheral{
if(self = [super init]){
self.cbPeripheral = peripheral; //where cbPeripheral is a property of this class to store the real CBPeripheral
}
return self;
}

关于ios - 子类 CBPeripheral 未转换为正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com