2013-05-09 3 views
1

Я хочу, чтобы отображал только некоторые элементы в массиве, но не могу понять, как это сделать.Показать только некоторые объекты в массиве

Это код, который я указал, что в настоящее время показывает все объекты в массиве:

@property (strong, nonatomic) NSArray *springs; 
@property (strong, nonatomic) NSMutableArray *leafs; 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"standardCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    Spring *spring = [springs objectAtIndex:indexPath.section]; // 13 objects 
    Leaf *leaf = [spring.leafs objectAtIndex:indexPath.row]; // 30 objects 

    cell.textLabel.text = league.shortName; 
    return cell; 
} 

Так что я хотел бы показать только 5 из 30 объектов листа из этого массива я создал, а не показывать все они. Есть ли способ сделать это?

(я использую API, чтобы потянуть элементы в массив)

Спасибо за помощь, будет размещать какой-либо конкретный код или другую информацию, необходимый!

EDIT Добавлен по запросу:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    Spring *spring = [springs objectAtIndex:section]; 
    return spring.leafs.count; 
} 

Я использую RestKit для отображения объекта.

ответ

2

Используйте [NSArray objectsAtIndexes:] (reference), чтобы получить подмножество массива.

Leaf *leaf = [spring.leafs objectAtIndex:indexPath.row]; 

// This will include objects 0-4: 
NSRange range = NSMakeRange(0, 5); 
NSArray *subset = [leaf objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]; 

range Просто настроить на любой старт/длина вы хотите в подгруппе.

EDIT: Конечно, любая логика подмножества в этом методе также должна быть дублирована в методе делегата numberOfRowsInSection:, иначе ваше приложение выкинет исключение.

+0

Спасибо за ответ, это имеет большой смысл, однако, когда я его попробовал, строка 'NSRange' дала мне ошибку, говорящую« Инициализация 'NSRange' с выражением несовместимого типа' NSRange' ... любая идея, почему? – Realinstomp

+0

@Reez Нет, я этого не понимаю. Вы можете забыть о 'NSMakeRange()' и просто указать 'range.location' и' range.length' явно. – trojanfoe

+0

Я сделал диапазон указателя вместо структуры, мой плохой Проблема у меня сейчас, но это то, что для моего textLabel я больше не могу использовать 'league.shortName', но все же я не могу использовать просто' subset.shortName', так что я бы использовал? Thx снова - – Realinstomp

1

Как насчет вашего tableView:numberOfRowsInSection, не возвращайте полный счетчик на полную весну. Например,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 5; 
} 

Вы пытаетесь лениво загрузить их или все остальное не имеет значения? Удачи.

+0

Остальные из них просто не имеют значения. Спасибо за ответ! То, что я получаю, когда пытаюсь вернуться 5, было сбой с сообщением «*** - [__ NSArrayM objectAtIndex:]: индекс 1 за пределами границ [0 .. 0] ' – Realinstomp

+0

Да, массив пуст. Проверьте свой метод, в котором вы заполняете массив, и посмотрите, почему он не заполняется. –

+0

Просто стрельба в темноте, это 'leafs', созданная как NSMutableArray? –

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