2009-08-28 66 views
12

我是新來的蘋果的iPhone 3.0 SDK支持核心數據的,我是比較新的iPhone開發排序管理對象的一個​​NSMutableArray。我的問題是稍微比文檔中的「複雜」排序。我懷疑我正在做出一個不正確的,基本的假設。如何通過一個對象圖

我如何通過一個屬性進行排序管理對象的預取集合包含幾層集合中更深?

實施例: 農場具有1對多至牛仔(Farm.cowboys) 牛仔具有1對1人(Cowboy.person) Person有lastName的(Person.lastName)

整個對象圖表已被提取,並且牛仔通過UITableView顯示。現在,我如何按姓氏排序牛仔隊?我需要重新取回嗎?如果是的話,我怎麼用嵌套排序來做到這一點?

目前我正在試圖理清牛仔的一個NSMutableArray([Farm.cowboys allobjects])的罰款,對牛郎這些屬性。但我不確定如何通過Cowboy.person.lastName對一組牛仔進行排序時如何完成這項工作?

回答

0

希望有人有更好的解決方案。但是....

與比較選擇一個包裝對象和排序對象的作品的引用。它沒有我想要的那麼幹淨,所以希望別人能拿出一個替代品。

本質CowboyWrapper有牛仔屬性。 CowboyWrapper也有一個比較選擇器。通過構建並保持同步一個CowboyWrappers的NSMutableArray,排序工作。

21

如果你能目標10.6,則可以使用塊做到這一點。像這樣:

- (NSArray *)sortedArray { 
    return [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){ 
    NSString *lastName1 = [[obj1 person] lastName]; 
    NSString *lastName2 = [[obj2 person] lastName]; 
    return [lastName1 caseInsensitiveCompare:lastName2]; }]; 
} 
+2

另外值得注意的是,如果您使用的是'NSMutableArray',你可以用'sortUsingComparator:'相反,如果你想。 – 2009-09-01 21:53:22

+0

您應該刪除轉換爲NSComparator。 – Psycho 2011-06-21 03:32:26

5

您可以按如下所示:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors: 
    [NSArray arrayWithObject: 
     [NSSortDescriptor 
      sortDescriptorWithKey:"person.lastName" 
      ascending:YES]]]; 

注意 ''在排序描述符鍵中。這是你如何遍歷對象圖。

1

如果要排序數字和字符串,然後用這個

NSArray *unsortedArray = [NSArray arrayWithObjects:@"Hello", @"4", @"Hi", @"5", @"2", @"10", @"1", nil]; 
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) { 
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch]; 
}]; 
相關問題