2009-11-03 2 views
0

У меня есть NSMutableArray:NSMutable Массив

NSMutableArray *temp = //get list from somewhere. 

В настоящее время существует один метод objectAtIndex который возвращает объект в указанном индексе.

Что я хочу сделать, так это то, что я хочу сначала проверить, существует или нет объект по указанному индексу. Если он существует, чем я хочу получить этот объект. Что-то вроде:

if ([temp objectAtIndex:2] != nil) 
{ 
    //fetch the object 
} 

Но я получаю исключение в выражении if, говорящем, что индекс за границами.

Пожалуйста, скажите мне, как этого достичь.

ответ

13

Вы не можете иметь «пустые» слоты в NSArray. Если [myArray count] == ​​2 ie массив имеет два элемента, то вы точно знаете, что есть объект с индексом 0 и объект с индексом 1. Это всегда так.

+3

Продолжая эту мысль, objectAtIndex: никогда не может возвращать ноль. В массиве не может быть объектов nil, и запрос чего-либо вне массива вызывает исключение. –

+1

Я думаю, вы можете ... просто заполнив объект NSNull;) – prakash

+0

+1 для «у вас не может быть пустых слотов» – bpapa

4

Сначала проверьте длину, используя метод подсчета.

if ([temp count] > indexIWantToFetch) 
    id object = [temp objectAtIndex:indexIWantToFetch]; 
0

Просто убедитесь, что индекс> = 0 и < Количество

Возвращает количество объектов, в настоящее время в приемнике.

- (NSUInteger)count 

int arrayEntryCount = [temp count]; 
2

вы могли бы сделать так:

При инициализации, сделать что-то вроде:

NSMutableArray *YourObjectArray = [[NSMutableArray alloc] init]; 
for(int index = 0; index < desiredLength; index++) 
{ 
    [YourObjectArray addObject:[NSNull null]]; 
} 

Тогда, когда вы хотите добавить, но проверить, если он уже существует, сделать что-то вроде этого:

YourObject *object = [YourObjectArray objectAtIndex:index]; 
if ((NSNull *) object == [NSNull null]) 
{ 
    /// TODO get your object here.. 

    [YourObjectArray replaceObjectAtIndex:index withObject:object]; 
} 
+2

Ты * мог * сделать так, но почему бы тебе этого хотелось? –

+1

Существует множество случаев, когда «нулевой заполнитель» полезен в массиве. Пракаш прав, говоря, что можно добавить [NSNull null] в массив. В одном случае я должен был решить, зависящий от позиции массив числовых значений мог иметь «отсутствующие значения». «Недостающее значение» - это не то же самое, что [NSNumber numberWithInt: 0] ... –

-2

Прежде всего вы проверить длину array-

NSMutableArray * temp = // получить список откуда-то.

Теперь регистрация по прибытию если (длина температуры) {

Вашего ObjectClass * OBJ = [температура objectAtIndex: indexnumber];

// indexnumber является 0,1,2, 3 или кто-нибудь ...

}