在不丢失先前数据的情况下将数据附加到字符串
Appending data to a string without losing previous data
我有这个在我的程序的顶部:
@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 的末尾。任何帮助将不胜感激。我认为顶部的 属性 可以让我这样做,但它要么只存储最后一个值,要么什么都不存储。我还不习惯 objective c 的方式。谢谢。
即使这样也不会向 self.data 写入任何内容:
NSString * result = [[requests valueForKey:@"value"] componentsJoinedByString:@""];
NSData* data = [result dataUsingEncoding:NSUTF8StringEncoding];
[self.data appendData:data];
// Log it
NSLog(@"%@",self.data);
您应该使用 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]];
}
记住孩子们在处理的时候NSMutableData
一定要初始化它!
_data = [[NSMutableData alloc] init];
这为我解决了 null 问题。
我有这个在我的程序的顶部:
@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 的末尾。任何帮助将不胜感激。我认为顶部的 属性 可以让我这样做,但它要么只存储最后一个值,要么什么都不存储。我还不习惯 objective c 的方式。谢谢。
即使这样也不会向 self.data 写入任何内容:
NSString * result = [[requests valueForKey:@"value"] componentsJoinedByString:@""];
NSData* data = [result dataUsingEncoding:NSUTF8StringEncoding];
[self.data appendData:data];
// Log it
NSLog(@"%@",self.data);
您应该使用 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]];
}
记住孩子们在处理的时候NSMutableData
一定要初始化它!
_data = [[NSMutableData alloc] init];
这为我解决了 null 问题。