【问题标题】:XML Parsing and set variables to instanceXML解析并将变量设置为实例
【发布时间】:2014-10-17 19:34:00
【问题描述】:

我创建了一个名为“事件”的类。这个类有三个变量。

主文件初始化这个类的一个实例,在我解析一个 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**
    }    
}

【问题讨论】:

    标签: ios objective-c xcode nsxmlparsererrordomain


    【解决方案1】:

    您在 viewDidLoad 中仅创建了局部变量 eventtoTrovato。如果您不仅想在一种方法中使用它,那么您必须在您的类中定义变量或属性,例如:

    @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];
        }    
    }
    

    【讨论】:

    • 非常感谢您的回答,但是每当它发现一个元素时这样做并不总是覆盖同一个实例?如果 volesi 为找到的每个元素创建一个新的事件对象并将其添加到数组的末尾?
    • 但是谢谢这么 eventtoTrovato * object is not overwritten cn 总是发现新数据?当我在调用后添加数组时,我没有发现很多元素都相等?
    • 它是本地实例,因此您创建一个,设置字符串并添加到数组并保留在那里。下次添加另一个时...如果找不到任何内容,则 [self.datiEvento count] 将为 0。如果您找到 5,则 [self.datiEvento count] == 5。5 个元素 isKindOfClass eventto
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2015-06-09
    • 2013-01-29
    • 2021-03-15
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多