2012-02-23 2 views
2

У меня есть класс EventsКак отсортировать NSMutableArray с объектами класса в нем?

@interface MeEvents : NSObject { 
    NSString* name;**strong text** 
    NSString* location; 

} 

@property(nonatomic,retain)NSString* name;strong text 
@property(nonatomic,retain)NSString* location; 

В моем NSMutablArray добавить объект События

Events* meEvent; 
[tempArray addObject:meEvent]; 

Пожалуйста, скажи мне, как сортировать этот массив по имени элемента.

ответ

2

Самый простой способ заключается в использовании sortUsingComparator: так:

[tempArray sortUsingComparator:^(id a, id b) { 
    return [[a name] compare:[b name]]; 
}]; 

Если вы сортируют эти строки, потому что вы хотите показать отсортированный список пользователю, вместо этого вы должны: localizedCompare::

[tempArray sortUsingComparator:^(id a, id b) { 
    return [[a name] localizedCompare:[b name]]; 
}]; 

Или вы можете использовать localizedCaseInsensitiveCompare:.

4
NSSortDescriptor *sortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
     [tempArray_ sortUsingDescriptors:[NSArray arrayWithObject:sortDes]]; 
     [sortDes release]; 
+0

Это дает ошибку SIGABRT. Свой массив возвращает объект класса класса, например Затем я получаю объект в Events * meEvent = [temparray objectAtIndex: i]; NSLog (@ "Name% @", meEvent.eventname); –

+0

@SawanCool: вы должны определить ключ в ["initWithKey:" "]. В приведенном выше коде я просто приведу пример как« имя ». Пожалуйста, запустите sortDescriptor с помощью вашего ключа. – Sree

1

Вы можете отсортировать массив с помощью NSArray «s

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator 

метод

Более подробно см this SO ответ

+0

Plz описывает ваш ответ. –

2

Объявите это в верхней части файла реализации выше @interface line

NSComparisonResult sortByName(id firstItem, id secondItem, void *context); 

Ниже приводится реализация для метода

NSComparisonResult sortByName(id item1, id item2, void *context) 
{ 
    NSString *strItem1Name = [item1 name]; 
    NSString *strItem2Name = [item2 name]; 

    return [strItem1Name compare:strItem2Name]; //Ascending for strItem1Name you can reverse comparison for having descending result 
} 

Это, как вы могли бы назвать его

[tempArray sortUsingFunction:sortByName context:@"Names"]; 
Смежные вопросы