XML解析并将变量设置为实例
问题描述:
我创建了一个名为“event”的类。这个类有三个变量。XML解析并将变量设置为实例
主要文件初始化此类的一个实例后,我解析一个XML文件,但当我去检索创建的实例,我不认识。
我在哪里错了?
#import "mkViewController.h"
#import "evento.h"
@interface mkViewController()
@end
@implementation mkViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://xxxxx.it/xxx.xml"];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
NSMutableArray *datiEvento = [NSMutableArray array];
evento *eventoTrovato = [[evento init]alloc];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
element = elementName;
if ([element isEqualToString:@"evento"]) {
// Create la array dell'evento
eventoTrovato.nome = string; **<--- not found eventoTrovato instace**
}
}
答
您在viewDidLoad中只创建了局部变量eventoTrovato。如果你想不仅在一个方法来使用它,那么你必须定义变量或属性在您的类,如:
@interface mkViewController()
@property (nonatomic, strong) evento *eventoTrovato;
@end
.....
- (void)viewDidLoad
{
.......
self.eventoTrovato = [evento new];
}
- (void)parser.........
{
.......
_eventoTrovato.nome = string;
}
,如果你想存储许多元素融入到阵列的另一件事是。该代码将如下所示:
@interface mkViewController()
@property (nonatomic, strong) NSMutableArray *datiEvento;
@end
- (void)viewDidLoad
{
.......
self.datiEvento = [NSMutableArray array];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
element = elementName;
if ([element isEqualToString:@"evento"]) {
evento *eventoTrovato = [evento new];
eventoTrovato.nome = string;
[self.datiEvento addObject:eventoTrovato];
}
}
非常感谢您的回答,但是每当它发现某个元素不总是覆盖同一个实例时,就这样做? 如果为每个找到的元素创建一个新的事件对象并将其添加到数组的最后我? – 2014-10-18 13:50:49
是的。我更新了答案。 – kabarga 2014-10-18 14:00:36
但感谢所以eventoTrovato *对象不被覆盖cn总是发现新的数据? 当我去调用后添加数组,我没有发现许多元素都相等? – 2014-10-18 14:04:06