Создайте класс данных, содержащий необходимые переменные экземпляра вместо изменяемого массива. Затем вы можете использовать различные методы сортировки класса NSArray, например sortedArrayUsingDescriptors
.
Сортировка может выглядеть так:
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"created_time"
ascending:YES] autorelease];
NSArray *sortedArray = [containerArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
EDIT
По словам г-на Фаулера из его книги Рефакторинг: улучшение дизайна существующего кода .
Заменить массив на объект
У вас есть массив, в котором определенные элементы означают разные вещи.
Заменить массив объектом, имеющим поле для каждого элемента
...
Мотивация
Массивы - это общая структура для организации данных. Однако их следует использовать только для того, чтобы содержать коллекцию похожих объектов в мрачном порядке.
Вот что мы хотим сделать здесь. Давайте создадим простой класс Posts. Вы можете легко добавить свой пользовательский инициализатор, который принимает четыре значения в качестве параметров, или даже метод вспомогательного класса для последующего возврата автоматически выпущенного объекта. Это просто базовый скелет:
Post.h
@interface Posts : NSObject
{
NSDate *created_time;
NSString *message;
UIImage *picture;
id fbSource; // Don't know what type :)
}
@property (nonatomic, retain) NSDate *created_time;
@property (nonatomic, copy) NSString *message;
@property (nonatomic, retain) UIImage *picture;
@property (nonatomic, retain) id fbSource;
@end
Post.m
#import "Post.h"
@implementation Post
@synthesize created_time, message, picture, fbSource;
#pragma mark -
#pragma mark memory management
- (void)dealloc
{
[created_time release];
[message release];
[picture release];
[fbSource release];
[super dealloc];
}
#pragma mark -
#pragma mark initialization
- (id)init
{
self = [super init];
if (self) {
// do your initialization here
}
return self;
}
РЕДАКТИРОВАТЬ 2
Добавление объекта Post в ваш массив:
Post *newPost = [[Post alloc] init];
newPost.reated_time = [Date date];
newPost.message = @"a message";
newPost.picture = [UIImage imageNamed:@"mypic.jpg"];
// newPost.fbSource = ???
[containerArray addObject:newPost];
[newPost release];