我有一个带有注释的XML文件,该文件在我的文件底部有一个ID,我已经成功地使用了NSLog" ing"到控制台。我使用NSXMLParser通过foundComment方法查找注释。然后我在底部有一个GetUID方法,我想返回我的uid字符串。我不知道如何访问我的解析数据并在另一个单独的方法中使用它。任何帮助将不胜感激。
XML文件:
<audioTracks>0</audioTracks>
<!--7934fad5a3a -->
XMLParser.h
#import <Foundation/Foundation.h>
@interface MyXmlParserDelegate : NSObject <NSXMLParserDelegate>
@end
XMLParser.mm
#import "XMLParser.h"
@implementation MyXmlParserDelegate
- (void) parserDidStartDocument:(NSXMLParser *)parser {
}
- (void)parser:(NSXMLParser *)parser
foundComment:(NSString *)uid{
NSLog(@"UID: %@", uid);
}
- (void) parserDidEndDocument:(NSXMLParser *)parser {
}
@end
MAIN.mm
-(NSString *)GetUID {
NSString * uid = nil;
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:MyData];
MyXmlParserDelegate *parserDelegate = [[MyXmlParserDelegate alloc] init];
[parser setDelegate:parserDelegate];
[parser parse];
return uid;
}
答案 0 :(得分:1)
最佳答案取决于您需要解析器委托的可重用性。
如果MAIN对象是唯一的客户,那么您可以完全取消委托类,只需将self
分配给GetUID
中分配解析器的委托。
更一般的想法是保留您的委托级别,并将其视为&#34; uid finder&#34;。在这种形式中,它将包含一个公共uid
属性,它将在解析期间初始化。 e.g。
// in the delegate
- (void)parser:(NSXMLParser *)parser foundComment:(NSString *)uid {
NSLog(@"UID: %@", uid);
self.uid = uid;
}
// in the customer
MyXmlParserDelegate *parserDelegate = [[MyXmlParserDelegate alloc] init];
parser.delegate = parserDelegate;
[parser parse];
修改强>
return parserDelegate.uid;
我们可以更加通用,但正确的方法将更多地取决于模型的性质以及XML解析过程需要概括的程度。
附注:习惯上将类和源文件命名为相同,因此MyXmlParserDelegate
实现文件更好地命名为&#34; MyXmlParserDelegate.m&#34;。此外,除非您的实现包含C ++,否则它们应该具有&#34; .m&#34;扩展。