Этот вопрос может быть вне базы, но вот в чем проблема:Как установить неинициализированное значение в Objective C?
Я пытаюсь запустить пример из iPhone SDK, и я столкнулся с нарушением прав доступа. Я проследил какое-то поведение, которое, как я думаю, подозрительно.
Вот что класс выглядит следующим образом:
@interface TableViewCell : UITableViewCell {
@private
UILabel *_earthquakeLocationLabel;
UILabel *_earthquakeDateLabel;
UILabel *_earthquakeMagnitudeLabel;
UIImageView *_magnitudeImageView;
}
Когда я поставил точку останова в
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
И посмотреть на «я» в отладчике, это показывает, что _earthquakeDateLabel является «0x12», _earthquakeMagnitudeLabel - 0x1000, а остальные два равны нулю. Если я попытаюсь назначить один из ненулевых, я получаю нарушение доступа.
Я догадываюсь, что происходит, что они имеют поддельные значения в них, и когда я пытаюсь их назначить, он пытается уменьшить ссылку на фиктивное значение и взорвать. Но, как я уже сказал, я довольно новичок в Objective C, поэтому я могу оказаться вне базы.
Итак, мой вопрос: есть ли что-то особенное в инициализации этих ценностей, которые я должен делать? Или любой способ присвоить значение, когда в нем есть фиктивное значение?
Некоторая дополнительная информация:
Так что, если я назначу ноль для _earthquakeDateLabel и _earthquakeMagnitudeLabel в Initialize, что устраняет проблему. Но я не понимаю, почему объект создается со значениями в этих полях; Я ожидаю, что они будут ноль. Объект создается на куче:
TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];