将数据附加到字符串而不会丢失以前的数据

时间:2015-07-21 02:55:10

标签: ios objective-c core-bluetooth

我认为这是我的计划的首要任务:

@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);

2 个答案:

答案 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];

这解决了我的空问题。