设置核心蓝牙外设管理器服务和特性时"Assignment to read-only property"错误



我正在遵循Apple Core蓝牙编程指南,尝试设置一个外围管理器来通告某些数据。我根据指南编写了以下代码 https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/PerformingCommonPeripheralRoleTasks/PerformingCommonPeripheralRoleTasks.html#//apple_ref/doc/uid/TP40013257-CH4-SW1

_peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
CBUUID *myConnectUUID = [CBUUID UUIDWithString:@"277860A8-9941-465B-9E75-F77F935299E7"];
CBUUID *advertiseUUID = [CBUUID UUIDWithString:@"C223B374-18FF-4D0B-8B46-B7CEC9C85077"];
_myCharacteristic =
[[CBMutableCharacteristic alloc] initWithType:advertiseUUID
properties:CBCharacteristicPropertyRead
value:nil permissions:CBAttributePermissionsReadable];
_myService = [[CBMutableService alloc] initWithType:myConnectUUID primary:YES];
_myService.characteristics = @[_myCharacteristic];
[_peripheralManager addService:_myService];

然而,在这条线上

_myService.characteristics = @[_myCharacteristic];

我收到一个 Xcode 错误,上面写着"分配给只读属性"。我不确定问题是什么,因为我直接按照说明进行操作,并且正在正确初始化服务/特征。有人有什么建议吗?

.h 文件中的_myservice声明:

@property (strong, nonatomic) CBService *myService;

问题是这一行:

@property (strong, nonatomic) CBService *myService;

您已将_myService声明为 CBService,因此据编译器所知,它不可变。因此,对于_myServicecharacteristics是不可分配的。

你应该写的

CBMutableService* service = [[CBMutableService alloc] initWithType:myConnectUUID primary:YES];
service.characteristics = @[_myCharacteristic];
_myService = service;

相关内容

最新更新