2011-07-22 60 views
2

我有一個數組,其中有NSString從NSDate轉換。我得到數組的初始索引並對它們進行排序。 日期格式爲:08AM,01PM。當我嘗試做NSSortDescriptor時,它總是給我01PM而不是08AM。排序NDString的NSDate在iphone

//** Date string **// 
NSDate *date1 = [dateFormat dateFromString:startSection]; 
[dateFormat setDateFormat:@"ah"]; 
startSection = [dateFormat stringFromDate:date1]; 
NSString *strSection = [NSString stringWithFormat:@"%@", startSection]; 

上面的字符串被添加到NSArray中。下面用NSArray對字符串進行排序。最後,相同的數組用於獲取首字母並在sectionforsectionIndexTitle中顯示其索引。所以我將AM8和PM1作爲部分,而不是8AM和1PM。

NSSortDescriptor *nameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"start" 
                    ascending:FALSE 
                    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease] ; 


NSArray *descriptors = [NSArray arrayWithObject:nameDescriptor]; 
[[dict objectForKey:aKey] sortUsingDescriptors:descriptors]; 
+3

爲什麼你不能只排序日期? –

+0

@Georg:我想排序的日期有正確的sectionForSectionIndexTitle。以便數據在正確的部分。 – lifemoveson

回答

2

如何使用sortUsingComparator:?但是這將涉及在比較之前將字符串從08AM更改爲AM0801PMPM01,所以這假設它們將是這種形式。

NSMutableArray * theArray = [dict objectForKey:aKey]; /* To be sorted */ 
[theArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSString * string1 = [NSString stringWithFormat:@"%@%@", [(NSString *)obj1 substringFromIndex:2], [(NSString *)obj1 substringToIndex:2]; 
    NSString * string2 = [NSString stringWithFormat:@"%@%@", [(NSString *)obj2 substringFromIndex:2], [(NSString *)obj2 substringToIndex:2]; 

    return [string1 localizedCaseInsensitiveCompare:string2]; 
}]; 

/* theArray is now sorted */ 
+0

我使用相同的數組來顯示它作爲sectionforsectionindextitle,並且還比較nsdate的排序。我如何通過爲他們兩個使用不同的數組來避免這種情況? – lifemoveson

+0

@lifemoveson這是有點不清楚你的意思是相同的陣列。很明顯,'NSDate'與你在包含章節標題的數組中有所不同。我假設你將有一個包含這個數組的鍵的字典,即每個部分標題映射到一個包含'NSDate'的數組。你能解釋一下,你是如何與這種方法有所不同的? –

+0

我編輯了上面的問題,現在更詳細地解釋。 – lifemoveson