使用 Core Bluetooth 从 NSArray 获取写请求值

Getting write request value from NSArray with Core Bluetooth

我这里有个方法:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
    NSLog(@"PERIPHERAL: peripheralManager:%@ didReceiveWriteRequests:%@", peripheral, requests);
    NSString * result = [[requests valueForKey:@"description"] componentsJoinedByString:@""];

    _label.text = result;
}

我在 NSArray 中收到写入请求。现在我只是将整个数组转换成一个字符串并将该字符串输出到一个文本框中。确保一切设置正确。它确实有效,但我不希望列出完整的数组,而只希望将值单独存储在 NSString 中。

我想要一个字符串:

Test

不是这个:

CBATTRequest: 0x1702240 Central = , Characteristic = , Offset = 0, Value = test

这应该很容易完成,我可能只是因为漫长的一天而脑死亡。这应该怎么做?

你需要考虑 requests 是一个 CBATTRequest 的数组,它有一个 value 属性 包含一个 NSData 对象代表数据正在写入。

如果您想要一个表示所有值的字符串,您需要遍历 requests 并将每个 NSData 值转换为 NSString 并将它们连接起来。如果我对你的问题的理解正确,这应该就是你要找的。

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests {

    NSMutableString *output = [[NSMutableString alloc] init];
    for (CBATTRequest *request in requests) {
        NSString *stringValue = [[NSString alloc] initWithData:[request value] encoding:NSUTF8StringEncoding];

        if (stringValue) {
            [output appendString:stringValue];
        }
    }

    _label.text = output.copy;
}

请注意,更新到 Xcode 7 将有助于使这一点更加清晰,因为 -peripheralManager:didReceiveWriteRequests:requests 参数已更新为使用 Objective-C 泛型,并且现在的类型是 NSArray<CBATTRequest *> *.