OGeek|极客世界-中国程序员成长平台

标题: ios - 使用核心蓝牙从 NSArray 获取写入请求值 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:51
标题: ios - 使用核心蓝牙从 NSArray 获取写入请求值

我这里有个方法:

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

    _label.text = result;
}

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

我想要一个字符串:

Test

不是这个:

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

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



Best Answer-推荐答案


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

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

- (void)peripheralManagerCBPeripheralManager *)peripheral didReceiveWriteRequestsNSArray *)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 *.

关于ios - 使用核心蓝牙从 NSArray 获取写入请求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31496159/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4