连接不完全字符串Objective-c
我不知道该如何命名,更不用说解释清楚了,但它就在这里 我目前有以下方法:连接不完全字符串Objective-c,objective-c,string,serial-port,Objective C,String,Serial Port,我不知道该如何命名,更不用说解释清楚了,但它就在这里 我目前有以下方法: - (void) receivedData:(NSString *)data { } 它在读取串行数据时触发。串行数据的输入形式为:255,23,1,4,6问题是,它不是作为一个统一的字符串输入的。它是零碎的。比如,255,,23,1,4,,等等。它是随机的,所以我无法跟踪它。有时它发送整个东西,另一些则一次发送两个字符。事实就是这样 在我的代码中,我如何才能等待整个事件进入(从开始,到结束),然后创建一个NSStrin
- (void) receivedData:(NSString *)data {
}
它在读取串行数据时触发。串行数据的输入形式为:255,23,1,4,6
问题是,它不是作为一个统一的字符串输入的。它是零碎的。比如,255
,,23,1,4,
,等等。它是随机的,所以我无法跟踪它。有时它发送整个东西,另一些则一次发送两个字符。事实就是这样
在我的代码中,我如何才能等待整个事件进入(从
开始,到
结束),然后创建一个NSString?也许当数据输入时,存储片段,等待结束,然后将它们组合在一起
谢谢
NSMutableString
ivar,并在接收数据时不断向其添加(appendString
)。。。
然后跟踪您是否已经满足开始/结束标记
类似这样的东西
在MyClass.h
中:
@interface Myclass : NSObject
{
NSMutableString *buffer, *tmpBuffer;
int status; // 0=waiting for <DMX>, 1=recording, 2=done
}
如何在“”传入时开始,在“”传入时结束?嗯。。这将更加困难,但请稍等几分钟;)非常感谢你,庞查:)我想再加一句,有时候它不会是完整的“”或“”。它可能以“”或“”的形式出现。很不幸是随机的。OSX?在ios NSXMLParser上,NSXMLDocument比这个自制的东西要简单得多:)@poncha并不是说您的代码是错误的,我同意,如果您可以选择使用XML解析器,那么这始终是首选方法。。。我的意思是,您将如何使用
DMX injection;)]]>代码>?
-(id) init {
if(self = [super init]) {
buffer = [[NSMutableString alloc] init];
tmpBuffer = [[NSMutableString alloc] init];
status = 0;
}
return self;
}
-(void) receivedData:(NSString *)data {
if(status == 2) return; // already done
// status=0 means we are still looking for start tag
if(status == 0) {
// add new data to last examined chunk (if any)
[tmpBuffer appendString:data];
// try to locate the open tag inside the tmpBuffer
NSRange range = [tmpBuffer rangeForString:@"<DMX>" options:NSCaseInsensitiveSearch];
// if found, store the portion after the start tag into buffer
if(range.location != NSNotFound) {
range.length = [tmpBuffer length] - range.location + 5; // 5 is length of start tag...
[buffer setString:[tmpBuffer substringWithRange:range]];
status = 1; // set status to 1 so we know recording started
} else {
// store last examined chunk
[tmpBuffer setString:data];
}
}
else {
[buffer appendString:data];
NSRange range = [buffer rangeForString:@"</DMX>" options:NSCaseInsensitiveSearch];
if(range.location != NSNotFound) {
range.length = [buffer length] - range.location;
[buffer deleteCharactersInRange:range];
status = 2;
}
}
}
-(void) dealloc {
[buffer release];
[tmpBuffer release];
[super dealloc];
}