【问题标题】:TBXML parsing issue while the value cannot get in UILabelTBXML 解析问题,而值无法进入 UILabel
【发布时间】:2012-07-05 14:09:12
【问题描述】:

在我的应用程序中,我正在使用 TBXML 解析器,我需要从 xml 文件中获取一个值并将其打印在标签上...这是我在服务器中的 xml 文件

 <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

我的 Viewcontroller.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_ACCESS 线程。我错过了什么吗...请帮助...

【问题讨论】:

    标签: iphone ios xcode nsurlconnection tbxml


    【解决方案1】:
    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 文件中的两个标题必须显示在其中,我该如何编辑我的代码?...我试过但第一个标题值显示在两者中标签...
    【解决方案2】:

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

    第二件事是你应该把这一行

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

    在 while 循环结束时,因为在第一次迭代中您只使用第一个项目,该项目是在 while 循环开始之前检索的。所以,如果你把它放在中间,就像你所做的那样,在某个时刻,在解析 XML 结束时,这行之后的下一行将使用一个 nil 对象。

    第三件事是在从TBXMLElement中取文本之前,你应该检查它是否不是nil:

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

    【讨论】:

    • 你能告诉我在我的代码中我必须在哪里插入那个 NSString...因为现在我在实验室中得到了值,但在实验室 1 中显示了“re”
    • 您将其插入到该行的位置,即在 if 语句中。您应该在 if 语句之前声明 plantName,因为编译会告诉您在某些情况下未声明 plantName(如果 if 语句不正确)
    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2013-01-02
    • 2011-06-05
    相关资源
    最近更新 更多