我正在爲Xcode6中的iOS設備開發一個應用程序(剛剛從xcode5更新),在某處用戶按下按鈕,然後在每個單元格中很好地合併了信息時看到tableview,是相應對象的細節,並且當他/她按下按鈕時,該對象由標識符數值指定。將TBXML分析器轉換爲NSXML解析器
所以基本上,使用segue方法捕獲用戶在前一個視圖(SecondViewController.m)中輸入到文本字段中的數值,然後是另一個視圖,其中只有一個按鈕被看到,該數字就是標籤。用戶按下按鈕並彈出一個tableview,顯示該對象的詳細信息。
數據(詳細信息)從xml URL中檢索,一切工作正常使用我的項目與TBXML作爲我的分析器。
但最近我在真實設備(iphone5s)上測試了應用程序,當按下按鈕以查看tableview和我的對象細節時,它不會發生任何事情,就好像按鈕不在那裏一樣,至少功能,但在模擬器的作品精彩。
我的老闆讓我更改我的代碼,使用NSXML解析器代替TBXML解析器。但我已經看過教程,但我並不簡單明白。
有人可以幫我翻譯我的TBXML代碼塊爲NSXML代碼請。 順便提一下,「對象」是一棵樹,詳細信息是該樹的具體信息,如溼度,分類,高度,溫度等。
這裏是一個XML鏈接:http://papvidadigital.com/risi/?nid=83
83)
是一個非常簡單的XML。
這裏是涉及該XML解析的代碼。
//XML
//LOADING THE XML FILE
//create link
NSString *buildingURL = [NSString stringWithFormat:@"http://papvidadigital.com/risi/?nid=%@", _passingValueToTable];
NSURL *myUrl = [NSURL URLWithString:buildingURL];
//setting data
NSData *myData = [NSData dataWithContentsOfURL:myUrl];
TBXML *sourceXML = [[TBXML alloc] initWithXMLData:myData error:nil];
//EXTRACT ELEMENTS
TBXMLElement *rootElement = sourceXML.rootXMLElement;
TBXMLElement *datoElement = [TBXML childElementNamed:@"dato" parentElement:rootElement];
//EXTRACT ATTRIBUTES
//EXTRACT element
//NID
//TBXMLElement *nidElement = [TBXML childElementNamed:@"NID" parentElement:datoElement];
//NSString *nidElementString = [TBXML textForElement:nidElement];
//NSLog(@"NID: %@\n", [nidElementString lowercaseString]);
//taxonomia
TBXMLElement *taxonomiaElement = [TBXML childElementNamed:@"taxonomia" parentElement:datoElement];
NSString *taxonomiaElementString = [TBXML textForElement:taxonomiaElement];
NSLog(@"taxonomia: %@\n", [taxonomiaElementString lowercaseString]);
//diametro
TBXMLElement *diametroElement = [TBXML childElementNamed:@"diametro" parentElement:datoElement];
NSString *diametroElementString = [TBXML textForElement:diametroElement];
NSString *diametroElementText = [ NSString stringWithFormat:@"%@ cm", diametroElementString];
NSLog(@"diametro: %@\n", [diametroElementString lowercaseString]);
//Verificar y validar icono correspondiente
NSString *ThumbImageDiametro;
NSInteger diametroElementNumber = [diametroElementString integerValue];
if(diametroElementNumber >= 30){
ThumbImageDiametro = @"diametroalto.png";
}else if(diametroElementNumber >= 15 && diametroElementNumber < 30){
ThumbImageDiametro = @"diametromedio.png";
}else if(diametroElementNumber < 15){
ThumbImageDiametro = @"diametropequeño.png";
}
對不起,有些條款是西班牙文。基本上我解析XML,發現每個孩子的「dato」,然後保存「>」和「<」內的內容作爲字符串值,以便稍後將其放入對象數組中,我必須將數據放入我的單元格中。正如你所看到的,我用「diametroElementNumber」做了一些if-else語句,這是因爲相應的ThumbImageDiametro(相應單元格中的圖像)將根據「diametroElementNumber」值進行更改。 (樹直徑大小)。我用一個簡單的轉換爲整數。
這是我的對象陣列的一個小例子:
_Description = @[taxonomiaElementString,
PlantadoElementString,
diametroElementText];
這是從我的圖片對象陣列(在每個小區中的圖像):
_Images = @[@"taxonomia.png",
@"fechadeplantacion.png",
ThumbImageDiametro];
這是我的對象陣列固定每個單元格的標題:
_Title = @[@"Taxonomía",
@"Año de Plantado",
@"Diámetro"];
這就是我如何將數據放入每個單元格:
//Put data into CELLS
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//for cells that have TableCell as identifier
static NSString *CellIdentifier = @"TableCell";
Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
long row = [indexPath row];
cell.TitleLabel.text = _Title[row];
cell.DescriptionLabel.text = _Description[row];
//put corresponding image
cell.ThumbImage.image = [UIImage imageNamed:_Images[row]];
[cell setBackgroundColor:[UIColor whiteColor]];
return cell;
}
最後的實現代碼如下一些通用/默認的方法:
//calculates and returns number of sections in tableview controller
- (NSInteger)numberOfSelectionsInTableView:(UITableView *)tableView
{
return 1; //number of sections
}
//calculates and returns number of rows in the section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _Title.count;
}
請有人可以幫助我改變什麼,以停止使用外部TBXML.h
& TBXML.m
文件,然後用分析是必要的,而是使用NSXML解析器來完成上述操作。
基本上我只想爲此翻譯的代碼。
預先感謝您