2015-04-06 109 views
0

創建我想排序一個NSMutableArray從XML創建了XMLReader的解析排序的NSMutableArray從NSDictionary的

NSURL *url = [NSURL URLWithString:@"http://url.to.xml"]; 
NSData *urlData = [NSData dataWithContentsOfURL:url]; 
NSError *error = nil; 
NSDictionary *dictPos = [XMLReader dictionaryForXMLData:urlData error:&error]; 
NSMutableArray *arrayEquipos = [[dictPos objectForKey:@"posiciones"] objectForKey:@"equipo"]; 

這是一塊XML的

<posiciones> 
<equipo id="5" orden="1" padre="21" key="bocajuniors" nombreCorto="Boca" paisId="1" paisSigla="ARG" nombreasociacion="Boca Jrs."> 
    <nombre>Boca Juniors</nombre> 
    <prom>1.583</prom> 
</equipo> 
</posiciones> 

我想做的排序是排序arrayEquipos標記'舞會'後裔。 謝謝!

編輯:在java中我這樣做:

Collections.sort(arrayEquipos, new MySalaryComp()); 


class MyEquipoComp implements Comparator<DescensoModel> { 

@Override 
    public int compare(DescensoModel e1, DescensoModel e2) { 
     if((Float.parseFloat(e1.getProm())) < Float.parseFloat(e2.getProm())){ 
      return 1; 
     } else { 
      return -1; 
     } 
    } 
} 

DescensoModel:

public class DescensoModel { 

private String equipo; 
private String prom; 

public String getEquipo() { 
    return equipo; 
} 

public void setEquipo(String equipo) { 
    this.equipo = equipo; 
} 

public void setProm(String prom) { 
    this.prom = prom; 
} 
public String getProm() { 
    return prom; 
} 

} 
+0

酷故事兄弟。你已經列出了你需要解決的問題。這對您的讀者來說沒有什麼意義,因爲標籤「舞會」只會在您的數據中出現一次。您應該將更大的arrayEquipos數組樣本記錄到控制檯,並編輯您的帖子以向我們展示更大的樣本。然後,你應該看看你是否可以弄清楚如何解析數據,並告訴我們你的嘗試中遇到的具體問題,而不是要求你的讀者爲你解決問題。 –

+0

你看過NSArray和NSMutableArray的文檔嗎? –

+0

Duncan C:如果我發現自己在stackoverflow中搜索解決方案是因爲我無法弄清楚。我不想別人解決我的問題,我只是尋求幫助。謝謝你。 熱舔:我必須看什麼?我非常新的目標c。 – Quetool

回答

1

[arrayEquipos sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"prom" ascending:YES]]]

使用prom.doubleValue爲重點,可以正常工作。

+0

我嘗試了很多不同的方式,沒人工作。即時通訊「無法識別選擇器發送到實例」錯誤。 – Quetool

+0

這很有幫助。哪個選擇器?哪個實例? 「發送給實例的無法識別的選擇器」是兩個最常問的初學者問題之一。 – gnasher729

+0

謝謝stevesliva,現在可以解決您的問題! – Quetool

0

我想通了:

首先,我創建了一個名爲EQUIPO

@interface Equipo : NSObject 

@property NSString *nombre; 
@property NSString *prom; 

@end 

然後我創建了一個nsmutable輔助陣列和我填這

arrayEquiposAux = [[NSMutableArray alloc] initWithCapacity:[arrayEquipos count]]; 
for(int i=0;i<[arrayEquipos count];i++){ 
    Equipo *equipo = [[Equipo alloc] init]; 
    equipo.nombre = [NSString stringWithFormat:@"%@", [[[arrayEquipos objectAtIndex:i] objectForKey:@"nombre"] objectForKey:@"text"]]; 
    equipo.prom = [NSString stringWithFormat:@"%@", [[[arrayEquipos objectAtIndex:i] objectForKey:@"prom"] objectForKey:@"text"]]; 
    [arrayEquiposAux addObject: equipo]; 
} 

然後,YES!我可以排序該陣列

NSArray *sortedArray = [arrayEquiposAux sortedArrayUsingComparator:^NSComparisonResult(Equipo *e1, Equipo *e2){ 
    return [e1.prom compare:e2.prom]; 
}]; 
+0

2件事 - 你應該在'Equipo'類中進行解析,例如在'init'方法('initWithDictionary:(NSDictionary *)dictionary')中。這個答案http://stackoverflow.com/a/29481912/669586是最後一步的更簡單的解決方案。 – Sulthan

+0

YESS!它更好!現在它工作!謝謝!並非常感謝stevesliva! – Quetool