我认为这是我的计划的首要任务:
@property (strong, nonatomic) NSMutableData *data;
我认为这样我就可以在每次运行此方法时存储值:
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
for (CBATTRequest *request in requests) {
NSString *stringValue = [[NSString alloc] initWithData: [request value] encoding:NSUTF8StringEncoding];
// Have we got everything we need?
if ([stringValue isEqualToString:@"EOM"]) {
// We have, so show the data,
[self.textview setText:[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]];
}
// Otherwise, just add the data on to what we already have
[self.data appendData:[request value]];
}
}
此方法等待接收写请求并将值存储在字符串中。我有一个核心蓝牙中心,它发送三个数据块。这是为了解决蓝牙LE中的数据传输大小限制。问题是我无法存储三个值。我试图不只是存储最后一个值,而是每次调用该方法时将新值添加到nsstring或nssdata的末尾。任何帮助将不胜感激。我认为顶部的属性允许我这样做,但它要么只存储最后一个值,要么根本不存储。我还不习惯目标c的方式。谢谢。
即使这样也没有给self.data写任何东西:
NSString * result = [[requests valueForKey:@"value"] componentsJoinedByString:@""];
NSData* data = [result dataUsingEncoding:NSUTF8StringEncoding];
[self.data appendData:data];
// Log it
NSLog(@"%@",self.data);
答案 0 :(得分:0)
您应该使用NSMutableArray而不是NSString作为可变字符串。
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{
NSMutableString *stringValue = [[NSMutableString alloc] init];
for (CBATTRequest *request in requests) {
[stringValue appendString:[[NSString alloc] initWithData:[request value] encoding:NSUTF8StringEncoding]];
// Have we got everything we need?
if ([stringValue isEqualToString:@"EOM"]) {
// We have, so show the data,
[self.textview setText:[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]];
}
// Otherwise, just add the data on to what we already have
[self.data appendData:[request value]];
}
答案 1 :(得分:0)
在处理NSMutableData
时,请记住小孩始终将其初始化!
_data = [[NSMutableData alloc] init];
这解决了我的空问题。