Проблема присвоения значения, полученного из [array objectAtIndex:]

В моем классе фортепиано у меня есть свойство (Keys - другой пользовательский класс)

@property (nonatomic, retain) Keys *lastPlayed;

В одном из моих методов Piano я установил значение lastPlayed, используя объект из массива объектов Key.

self.lastPlayed = [allKeys objectAtIndex:variable];

Приведенная выше строка кода вызывает сбой программы.

Я заметил, что если я жестко закодирую конкретный объект Key из массива allKeys, то он работает нормально. Вот так:

self.lastPlayed = keyC;

Интересно, что это не даст сбой, если я добавлю код сбоя в другой метод.

Как я могу предотвратить аварию?

РЕДАКТИРОВАТЬ:

Я называю этот метод в классе Keys, где мое фортепиано является делегатом

[delegate deliverTagwithNameTag:self.tag]

пианино тогда отвечает

- (void) deliverTagwithNameTag:(int)nameTag {

self.lastPlayed = [allKeys objectAtIndex:nameTag];

}

1 ответ

Решение

Вы, вероятно, не получаете простой необъяснимый сбой, вы, вероятно, выдвигаете исключение. Вы можете посмотреть консоль, чтобы узнать, какое исключение вы подняли. Обычно в такой ситуации будет полезно сказать вам, что вы запрашиваете у массива значение за пределами допустимого диапазона (что может произойти, если variable что-то собирали неверное значение), что сам массив недействителен (что может быть проблемой выделения памяти) или что возвращаемая вещь не может быть сохранена как lastPlayed (что обычно означает, что вы делаете что-то нестандартное в сеттере и получаете неожиданный тип класса).

Поэтому, чтобы предотвратить сбой, проверьте вашу консоль и найдите одну из этих проблем.

Другие вопросы по тегам