0

私のアプリでは、xmlファイルから値を取得してラベルに出力する必要があるTBXMLパーサーを使用しています...これはサーバー内の私の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

私の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_ACCESSスレッドを取得しています。何かが足りませんか...ヘルプpls...

4

2 に答える 2

1

まず、ビューがモデルと混同しないように、XMLファイルを別のメソッドで解析することをお勧めします。XMLアイテムのオブジェクトモデルを作成します。次に、たとえば、あるメソッドでは、XMLファイルでアイテムを表すオブジェクトを配列に入力します。その場合にのみ、XMLを解析してこれらのオブジェクトを取得するときに、この配列をビューにバインドする必要があります。

2つ目は、この行を入力する必要があることです

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

whileサイクルの終わりに、最初の反復では最初のアイテムのみを操作するため、whileサイクルが開始する前に取得されました。したがって、XMLの解析の最後に、ある時点で行ったように、それを中央に配置すると、この行の次の行はnilオブジェクトで機能します。

3つ目は、TBXMLElementからテキストを取得する前に、それがnilでないかどうかを確認する必要があるということです。

NSString *plantName;
if (elem_PLANT) {
 plantName = [TBXML textForElement: elem_PLANT]; 
}
于 2012-07-05T12:13:00.473 に答える
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];
于 2012-07-05T07:41:05.503 に答える