这是我的代码:
。H
NSMutableString *dmxCharacters;
NSXMLParser *parser;
.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
parser = [[NSXMLParser alloc] init];
}
- (void) receivedData:(NSString *)data {
NSData *data2 = [data dataUsingEncoding:NSUTF8StringEncoding];
parser = [[NSXMLParser alloc] initWithData:data2];
[parser setDelegate:(id)self];
[parser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
dmxCharacters = [[NSMutableString alloc] initWithCapacity:500];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[dmxCharacters appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSRunAlertPanel(@"", dmxCharacters, @"", @"", @"");
}
receivedData:(NSString*)data 在通过串口接收数据时被调用。我有基本的 XML 数据进来。串行数据进来:<DMX>255,23,1,4,6</DMX>
问题是,它不是作为一个统一的字符串进来的。它是碎片化的。比如, <DM
, X>255
, ,23,1,4,
, 等等。它是随机的,所以我无法追踪它。有时它会发送整个内容,有时它会一次发送几个字符。
我在这里添加了一个 NSLog(导出字符串):- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
它给了我 "255,23,1" 或 "255,23,1,4" 它没有得到全部。另外, didEndElement 永远不会被调用。我认为这是因为我一直在重新启动 NSXMLParser 并且当串行数据在它没有正确启动解析之后进来时。很难解释。
有什么解决办法吗?不重新启动 NSXMLParser 而是向其中添加数据的方法?