在不丢失先前数据的情况下将数据附加到字符串

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 问题。