2013-01-14 85 views
4

在我的項目中,我從APi獲取一些數據,並通過解析JSON將數據檢索到NSMutableArray。它有一個被稱爲「的StartDate」鍵是以下格式:「mm/dd/yyyy hh:mm:ss」 如下所示使用NSSortDescriptor對NSMutableArray中的NSDate對象進行排序?

StartDate: "5/18/2013 12:00:00 AM" 

我這些數據保存到resultArray。也有4個鍵的對象作爲我的JSON的形式是

{ 
    EventId: "xxxx", 
    Title: "xxx", 
    Location: "xxxx", 
    StartDate: "5/18/2013 12:00:00 AM", 
    Link: null 
} 

這裏有多個這樣的對象。所有我需要做的是

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"StartDate" ascending:TRUE]; 
[resultArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

但我對resultArray基於日期(升序或降序)內容 我用下面的代碼進行排序; m到處改組結果,排序不正確的,任何人都可以打電話給我,我哪裏出了錯。

感謝

+1

也許(可能)愚弄的人,但肯定不是太本地化。我只能懷疑倒票選者太懶惰,不願意看這些蠢事。 –

+0

@HotLicks你是對的!感謝您的評論老兄,我只是張貼這樣讓他們知道不要濫用他們的權利在這裏!他們中的一些人認爲它是downvote和flag的愛好! –

回答

6

應工作

[resultArray sortUsingComparator:^NSComparisonResult(id a, id b) { 

    static NSDateFormatter *dateFormatter = nil; 

    if (!dateFormatter) { 
     dateFormatter = [[NSDateFormatter alloc] init]; 
     dateFormatter.dateFormat = @"mm/dd/yyyy hh:mm:ss"; 
    } 

    NSString *date1String = [a valueForKey:@"StartDate"]; 
    NSString *date2String = [b valueForKey:@"StartDate"]; 

    NSDate *date1 = [dateFormatter dateFromString:date1String]; 
    NSDate *date2 = [dateFormatter dateFromString:date2String]; 

    return [date1 compare:date2]; 
}]; 
+0

偉大的答案男人,我解決了它使用你的答案,jsut改變了從MM的dateformat ...到M​​M –

+0

另一種選擇是將字符串重新排列爲yyyymmdd的順序。可以用幾個簡單的字符串操作來完成。 –

3

你的起始日期似乎是字符串格式,我相信它的洗牌它的字符串。您應該轉換成NSDate的第一,比將此描述符...希望這有助於。

+0

感謝您的幫助,但我沒有更改APi格式的權限,所以我應該在轉換爲日期格式後替換數組中的每個日期鍵? –

+0

您必須將其存儲在數據模型中,我猜,您可以在其中指定此模型對象的屬性作爲NSDate,並將它提供給對象將其轉換爲日期...或者更簡單,您可以按照您的意思進行操作這不是標準的做法......但是什麼......你應該首先嚐試你的方法,如果它稍後有效,你可以將它轉換爲數據模型對象 –

+0

這很有道理,但你可以看到更簡單的方法通過檢查接受的答案。謝謝 –

相關問題