2012-05-19 28 views
1

目前在我的應用程序中,我有一個從NSUserDefaults加載的NSArray。 NSArray中的每個對象都是一個NSDictionary,它有大約5個不同的鍵。我根據其中的NSDates重新訂購了自己的NSDictionarys。我不想單獨對NSDates進行排序。在NSArray裏面的NSDictionary中排列NSDates?

我曾嘗試使用此代碼做到這一點:

NSComparator sortByDate = ^(id dict1, id dict2) { 
     NSDate* n1 = [dict1 objectForKey:@"Date"]; 
     NSDate* n2 = [dict2 objectForKey:@"Date"]; 
     return (NSComparisonResult)[n1 compare:n2]; 
    }; 
    [self.cellArray sortUsingComparator:sortByDate]; 

雖然即使代碼被執行沒有任何反應。我很困惑,但是如何根據內部的東西重新排列NSDictionarys。

任何人都可以提供任何見解嗎?

謝謝!

+0

你可以在排序前後給我們一個NSLog輸出嗎? –

+0

@RyanPoolos我這樣做後刷新UITableView,所以我肯定會看到任何改變。我的代碼沒有做這項工作有什麼問題嗎? –

+0

也可以嘗試NSLoging您的n1和n2,並確保它們是有效的日期對象正確拉動。 –

回答

1

你可以嘗試對它進行內聯排序,但我懷疑這會產生什麼主要影響。但我可以說我從來不抽象出我的街區。我肯定會嘗試NSLogging,以確保您獲得有效的NSDates。

[cells sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
     NSDate *n1 = [obj1 objectForKey:@"Date"]; 
     NSDate *n2 = [obj2 objectForKey:@"Date"]; 

     if (n1 > n2) { 
      return NSOrderedAscending; 
     } else (n1 < n2) { 
      return NSOrderedDescending; 
     } else { 
      return NSOrderedSame; 
     } 

    }]; 
+0

只是扭轉你的經營者或你的回報,以獲得你想要的訂單:) –

+0

感謝您的幫助到目前爲止。不過,我對最先訂購的最新日期感到困惑。這是我想要的唯一順序。我對你爲什麼使用if和else有點困惑。有沒有辦法編輯這條線來做我想要的?返回(NSComparisonResult)[n1比較:n2]; –

+0

if語句完成這項工作。如果n1大於n2,則在n2之前返回n1。否則它在n1之前返回n2。 NSDates只是int,代表自1970年以來的秒數。所以簡單大於小於運算符將決定哪個更老。 –