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];
答
所有我的第一建议您使用单独的方法解析您的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];
}
韩国社交协会乌拉圭回合的答案,但我越来越线程BAD_ACCESS..Any知道如何避免它。 。 – Dany
检查我的新编辑。 – Peres
Tks for ur great help..Its working ... – Dany