0

我有一个 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.";
    }

}

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

4

2 回答 2

0
[text setString:@""]; 

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

于 2013-07-16T20:16:18.763 回答
0

我用下面的代码弄明白了,

# 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:@""];
    }

}
于 2013-07-16T20:25:53.987 回答