如何访问已解析的 XML 数据并在其他方法中使用它?

How can I access parsed XML data and use it in other methods?

我有一个 XML 文件,其中的注释在我的文件底部有一个 ID,表明我已成功将 NSLog"ing" 输出到控制台。我使用 NSXMLParser 通过 foundComment 方法查找评论。然后我在底部有一个 GetUID 方法,我想 return 我的 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;

}

最佳答案取决于您需要的解析器委托的可重用性。

如果 MAIN 对象是唯一的客户,那么您可以完全消除委托 class,只需使 self 成为您在 GetUID 中分配解析器的委托。

一个更普遍的想法是保留您的代表 class,并将其具体视为 "uid finder"。在这种形式中,它将包含一个 public uid 属性 它将在解析期间初始化。例如

// 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 解析过程需要泛化的程度。

旁注:习惯上将 classes 和源文件命名为相同的名称,因此 MyXmlParserDelegate 实现文件最好命名为 "MyXmlParserDelegate.m"。此外,除非您的实现包含 C++,否则它们应该具有“.m”扩展名。