如何清除/归零用于通过串行端口接收字符的NSMutableString



我有一个NSMutableString,我想在收到来自Arduino的一系列字符后清除它。接收字符的方法如下所示,

# pragma mark - JailbrokenSerialDelegate
- (void) JailbrokenSerialReceived:(char)ch {
    //NSLog(@"Received %c", ch);
    [text appendFormat:@"%c", ch];
    //[text stringByAppendingFormat:@"%c",ch];
    NSLog(@"Received %@",text);
    if ([text isEqual: @"{valve_open}"]) {
        _lblValveState.text = @"Valve Opened.";
    }
    if ([text isEqual: @"{valve_close}"]) {
        _lblValveState.text =@"Valve Closed.";
    }
}

基本上,这个方法在每次发送一个字符时都会运行,并将新的字符附加到以前收集的字符上,然后根据这些字符构造一个NSMutableString"文本"。在这个方法中,我不能将字符串设置为nil,因为在收到一个字符后,它会将字符串清零,所以我需要一种方法来收集从Arduino发送的所有字符,在发送完所有字符后,我需要将字符串"text"设置为nil。原因是,如果我点击按钮"openValve"并打开阀门,Arduino会一次向iPhone发送一个字符"{valve_open}",最终将满足"text"字符串条件。现在,当我按下关闭阀门按钮时,字符串"text"仍将包含打开阀门状态的字符。

[text setString:@""]; 

应该从字符串中删除字符。请注意,使用NSString可能不一定是一件好事,因为您没有考虑到NSString可以存储多字节数据。对于您正在做的事情来说,这可能已经足够好了,但您最好将arduino输出存储到NSData对象中,使用NSUTF8Encoding(或arduino发送给您的任何内容),然后根据需要将其转换为字符串。如果要继续使用NSString,您可能需要使用[text isEqualToString:@"{valve_close}"]。

我用下面的代码解决了这个问题

# pragma mark - JailbrokenSerialDelegate
- (void) JailbrokenSerialReceived:(char)ch {
    //NSLog(@"Received %c", ch);
    [text appendFormat:@"%c", ch];
    //[text stringByAppendingFormat:@"%c",ch];
    NSLog(@"Received %@",text);
    if ([text isEqual: @"{valve_open}"]) {
        _lblValveState.text = @"Valve Opened.";
        [text setString:@""];
    }
    if ([text isEqual: @"{valve_close}"]) {
        _lblValveState.text =@"Valve Closed.";
        [text setString:@""];
    }
}

最新更新