2015-11-22 2 views
0

Я боролся с тем, что должно быть довольно простой задачей.Получение из (и сортировка) NSMutable Array

В viewController.h у меня есть:

@interface MoviesList : NSObject {  
} 
@property NSString *aTitle; 
@property NSDate *aReleaseYear; 
@property NSString *aCharacter; 
@end 

В viewController.m (fetchedData содержит ответ JSON, movieCount уже определена) Я:

NSMutableArray *moviesArray; 

MoviesList *movieDetails = [[MoviesList alloc] init]; 

int myCount = 0; 

while (myCount < movieCount) {  
     MoviesList *movieDetails = [[MoviesList alloc] init]; 
     // Insert character played into array. 
     movieDetails.aCharacter = fetchedData[@"cast"][myCount][@"character"]; 

     // Insert movie title and release date into array. 
     movieDetails.aTitle = fetchedData[@"cast"][myCount][@"title"]; 
     movieDetails.aReleaseYear = fetchedData[@"cast"][myCount][@"release_date"]; 

     [moviesArray addObject:movieDetails]; 

     NSLog(@"Title: %@",movieDetails.aTitle); 
     NSLog(@"Release date: %@",movieDetails.aReleaseYear); 
     NSLog(@"Character: %@",movieDetails.aCharacter); 

     myCount++; 

} 
NSLog(@"moviesArray: %@",moviesArray); 

При запуске с контрольными точками и наведите курсор на 'moviesArray' в последней строке выше, я вижу, что он заполняется с правильной информацией:

@"58 objects" 
[0] = (MoviesList *) 0x7962b650 
> NsObject 
> _aTitle = blah blah 
> _aReleaseYear = blah blah 
> _aCharacter = blah blah... 

Итак, кажется, что массив заполняется правильно. Теперь проблемы в том, как сортировать эту информацию по дате выпуска (я весь день расчесывал этот форум и видел различные ответы на сортировку, с которыми у меня был небольшой успех), а затем отображает отсортированный массив через NSLOG.

Любая помощь приветствуется, на этом форуме действительно много знаний и всегда кто-то хочет предложить помощь. Спасибо.

+0

Обновите свой вопрос тем, что вы предприняли. Объясните, какие у вас были проблемы. – rmaddy

ответ

1

Этот фрагмент кода будет сортировать содержимое moviesArray от aReleaseYear, в порядке возрастания:

NSSortDescriptor *ageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"aReleaseYear" ascending:YES]; 
NSArray *sortDescriptors = @[ageDescriptor]; 
NSArray *sortedArrayByReleaseYear = [moviesArray sortedArrayUsingDescriptors:sortDescriptors]; 

Если вы хотите, чтобы они в порядке убывания, изменить восходящий к NO.

+0

Спасибо, Хосе, я ценю быстрый ответ. – Lee

+0

Почему это не так просто, как использование NSLog (@ "Sorted Array:% @", sortedArrayByReleaseYear); Что будет правильным кодом для вытягивания (например) первого заголовка из sortedArrayByReleaseYear и отображения его через NSLOG? – Lee

+0

Если вы хотите первый объект, вы можете сделать '' 'NSLog (@" Первый объект:% @ ", [sortedArrayByReleaseYear firstObject])' ''; – Jose

Смежные вопросы