TBXML解析问题,而价值不能在UILabel

问题描述:

在我的应用程序中,我使用TBXML分析器,我需要从XML文件中获取值并将其打印在标签上...这是我在服务器中的xml文件TBXML解析问题,而价值不能在UILabel

<gold> 
<price> 
<title>22 K Gold</title> 
</price> 
<price> 
<title>24 K Gold</title> 
</price> 
</gold> 

任我Viewcontroller.h看起来像

#import <UIKit/UIKit.h> 
#import "TBXML.h" 

@interface ViewController : UIViewController{ 

IBOutlet UILabel *lab; 
TBXML *tbxml; 
} 



@end 

和我Viewcontrooler.m看起来像

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
NSData *xmlData = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://www.abcde.com/sample.xml"]]; 
tbxml = [[TBXML alloc]initWithXMLData:xmlData]; 


TBXMLElement * root = tbxml.rootXMLElement; 

if (root) 
{ 
    TBXMLElement * elem_PLANT = [TBXML childElementNamed:@"price" parentElement:root]; 
    while (elem_PLANT !=nil) 
    { 
     TBXMLElement * elem_BOTANICAL = [TBXML childElementNamed:@"title" parentElement:elem_PLANT]; 
     NSString *botanicalName = [TBXML textForElement:elem_BOTANICAL]; 
     lab.text=[NSString stringWithFormat:@"re %@", botanicalName]; 

     elem_PLANT = [TBXML nextSiblingNamed:@"price" searchFromElement:elem_PLANT]; 

     elem_BOTANICAL = [TBXML childElementNamed:@"title" parentElement:elem_PLANT]; 

     botanicalName = [TBXML textForElement:elem_BOTANICAL]; 
     lab1.text=[NSString stringWithFormat:@"re %@", botanicalName]; 
    } 
} 

} 

我越来越BAD_A CCESS thread.Am我缺少什么...帮助请...

lab.text=[NSString stringWithFormat:@"re %@",elem_BOTANICAL]; 

编辑1.0:

lab.text=[NSString stringWithFormat:@"re %@", botanicalName]; 

编辑2.0:

lab.text=[NSString stringWithFormat:@"re %@", botanicalName]; 

NSString *plantName = [TBXML textForElement: elem_PLANT]; 

lab1.text=[NSString stringWithFormat:@"re %@", plantName]; 
+0

韩国社交协会乌拉圭回合的答案,但我越来越线程BAD_ACCESS..Any知道如何避免它。 。 – Dany

+0

检查我的新编辑。 – Peres

+0

Tks for ur great help..Its working ... – Dany

所有我的第一建议您使用单独的方法解析您的XML文件,以便您的视图不会混淆您的模型。为您的XML项目创建一个对象模型。然后,例如,在一种方法中,您使用XML文件中代表项目的对象填充数组。只有当你通过解析XML来检索这些对象时,你应该将这个数组与你的视图绑定。

第二件事是,你应该把这个线

elem_PLANT = [TBXML nextSiblingNamed:@"price" searchFromElement:elem_PLANT]; 

在while循环的结束,因为你只有第一项工作的第一次迭代,而周期开始那是以前检索。所以,如果你把它放在中间,就像你一样,在解析XML的最后一段时间,这行之后的下一行将与一个零对象一起工作。

的第三件事是,从TBXMLElement服用文本之前,你应该检查,如果它不是零:

NSString *plantName; 
if (elem_PLANT) { 
plantName = [TBXML textForElement: elem_PLANT]; 
} 
+0

你可以告诉我,我必须在哪里插入NSString我的代码...因为现在我正在实验室中获取值,但在lab1中显示“re” – Dany

+0

您只需在if中插入此行,即if语句。你应该在if语句之前声明plantName,因为compile会告诉你在某些情况下plantName没有被声明(在if语句不是真的情况下) – wzbozon