Проблема присвоения значения, полученного из [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
(что обычно означает, что вы делаете что-то нестандартное в сеттере и получаете неожиданный тип класса).
Поэтому, чтобы предотвратить сбой, проверьте вашу консоль и найдите одну из этих проблем.