#ios #objective-c #exc-bad-access
#iOS #objective-c #исключение-bad-access
Вопрос:
Я получил эту ошибку при загрузке моего вторичного представления (и попытке получить переменную weight из контроллера модального представления):
EXC_BAD_ACCESS (code=2, address=0x0)
Это строка, выделенная XCode (из modalViewController.m):
- (CGFloat)getWeight {
return *(weight);
}
Но проблема заключается в этой строке кода в методе viewDidAppear (если я ее закомментирую, она отлично работает) (из ViewController.m):
-(void)viewDidAppear:(BOOL)animated {
[_showModalViewButton setTitle:[NSString stringWithFormat:@"%f",[modalViewController getWeight]] forState:UIControlStateNormal];
}
Когда приведенная выше строка кода была в viewDidLoad, она работала нормально, но мне нужно, чтобы заголовок UIButton обновлялся каждый раз при появлении дополнительного представления
(Я надеюсь, что это простое исправление, но я очень новичок в разработке iOS)
Комментарии:
1. почему вы отменяете ссылку на переменную weight в вашем методе getter?
2. Что вы имеете в виду? Я хотел ввести ‘return weight;’, но я получил ошибку, и Xcode исправил ее на ‘* (вес)’
3. какого типа
weight
?4.
weight
является ли CGFloat iVar объявленным в modalViewController.h
Ответ №1:
Наиболее вероятная причина ваших проблем заключается в том, что вы объявили, что у weight
вас есть тип CGFloat *
вместо просто CGFloat
.
Измените любые ссылки на CGFloat *
на CGFloat
.
Затем измените свой getWeight
метод, чтобы просто сделать:
return weight;
Комментарии:
1. Не могли бы вы объяснить разницу между ними?
2. Один, если ссылка на примитивный тип
CGFloat
, а тот, что со звездочкой, является указателем на примитивный типCGFloat
. При обычном использовании вы используете указатели только с объектами, а не с примитивными типами.
Ответ №2:
Вы получаете эту ошибку, потому что пытаетесь получить доступ к несуществующей переменной (отсюда и адрес 0x0). Доступ к свойству в получателе осуществляется через _weight
, которое ссылается на ivar.
Комментарии:
1. Если бы это была несуществующая переменная, она бы не компилировалась. И у ivar не обязательно должно быть имя
_weight
, это может бытьweight
, если именно так было синтезировано свойство. В OP даже указано, чтоweight
это ivar. Никакое свойство не задействовано.