Как получить индекс в непостоянном массиве? - PullRequest
1 голос
/ 18 августа 2011

Я знаю, indexOfObject может вернуть индекс элемента в массиве, но я проверяю, что этот метод является методом NSArray, а не NSMutableArray, и элемент в моем массиве является объектом, имеет ли это значение ? Потому что в настоящее время моя программа падает, когда вызывается следующий код.

Class *obj = [[Class alloc] init];
obj.textField1 = outlet1.text;
obj.textField2 = outlet2.text;
NSUInteger index = [myMutableArray indexOfObject:obj];
outlet1.text = [[myMutableArray objectAtIndex:index-1] textField1];
outlet2.text = [[myMutableArray objectAtIndex:index-1] textField2];
[obj release];

То, что я пытаюсь сделать здесь, это когда я вызываю код выше, эти выходы показывают детали предыдущего объекта в массиве. HELP

Хорошо, вот что я действительно хочу сделать:

Я хочу создать объект, введя вещи в два текстовых поля, а затем сохранить объект в массиве. Массив, о котором я говорю, уже объявлен в заголовочном файле и выделенном пространстве. Приведенный выше код на самом деле является методом для отображения предыдущего объекта, который уже создан. Первые три строки предназначены для создания объекта, который представляет текущий объект, отображаемый в текстовых полях. Затем я хочу посмотреть его в моем массиве и получить его индекс. Причина, по которой я использую «index-1», заключается в том, что я хочу увидеть предыдущий объект, который я создал. Под словом «сбой» я подразумеваю, что программа просто выходит и возвращается на домашний экран моего симулятора. Спасибо!


Хорошо, я наконец-то нашел решение своей проблемы, я нашел другой способ получить текущий объект, вместо того, чтобы «создавать» «новый» объект и сравнивать его с объектами в массиве, я использую флаг записать индекс текущего объекта на экране и уменьшить его, чтобы получить предыдущий объект. В любом случае, спасибо, ребята.

Ответы [ 5 ]

2 голосов
/ 18 августа 2011

NSMutableArray расширяет NSArray и наследует все его методы.Поэтому вызов objectAtIndex: для NSMutableArray - это нормально.

Без журнала сбоя я не могу сказать, в чем проблема, но мое первое предположение было бы, что index-1 равно -1, когда index0, или выходит за границы, когда indexOfObject: возвращает NSNotFound.

0 голосов
/ 18 августа 2011

Это работа для вашего отладчика. Поместите точку останова в строку, которая дает сбой, и проверьте значения ваших переменных. Похоже, вы ожидаете, что переменные будут иметь определенное значение (последний объект в массиве), но предположим, что массив пуст? GDB твой друг, и даже лучше в Xcode 4.1

0 голосов
/ 18 августа 2011

Прежде всего, когда obj даже помещается в массив в приведенном выше коде?Кажется, будто вы пытаетесь увидеть, есть ли в вашем массиве объект Class, но вы выделяете новый, а затем проверяете.Вы должны использовать indexOfObject:, если у вас есть фактическая ссылка на объект в массиве, в противном случае, как это может быть там?Кроме того, indexOfObject: возвращает NSNotFound, если объект не существует, возможно, именно поэтому ваш метод дает сбой.Если вы хотите найти самый ранний объект определенного класса в вашем массиве, попробуйте:

for(int i = 0; i < [myMutableArray count]; i++){
  if([[myMutableArray objectAtIndex:i] isKindOfClass:[Class class]]){
    // Do stuff.
    break;
  }
}

Надеюсь, это поможет!

0 голосов
/ 18 августа 2011

Майкл, чтобы сохранить объект в непостоянном массиве ...

YourObject *obj = [[YourObject alloc] init];
obj.textField1 = ... ;
obj.textField2 = ... ;

NSMutableArray *array = [NSMutableArray arrayWithCapacity:1];
[array addObject:obj];

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

for (ID *obj in array) 
{
  if ([obj isKindOfClass:[YourObject class]]) 
  {
    outlet1.text = (SomeObject)obj.textField1;
    outlet2.text = (SomeObject)obj.textField2;
  }
}

Надеюсь, это поможет.

0 голосов
/ 18 августа 2011

Вы делаете индекс -1, который, если индекс == 0, будет недопустимой позицией. Функция возвращает ИНДЕКС. который уже 0 на основе. :)

...