【问题标题】:EXC_BAD_ACCESS error with getter使用 getter 的 EXC_BAD_ACCESS 错误
【发布时间】:2014-07-05 22:08:41
【问题描述】:

在加载我的辅助视图(并试图从模态视图控制器获取权重变量)时出现此错误:

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 开发非常陌生)

【问题讨论】:

  • 为什么要在 getter 方法中取消引用权重变量?
  • 什么意思?我想输入'return weight;',但出现错误,Xcode 将其更正为'*(weight)'
  • weight 是什么类型的?
  • weight 是在 ModalViewController.h 中声明的 CGFloat iVar

标签: ios objective-c exc-bad-access


【解决方案1】:

问题的最可能原因是您声明 weight 的类型为 CGFloat * 而不仅仅是 CGFloat

CGFloat * 的所有引用更改为CGFloat

然后将您的getWeight 方法更改为简单地执行:

return weight;

【讨论】:

  • 你能解释一下两者的区别吗?
  • 如果对原始类型 CGFloat 的引用和带有星号的引用是指向原始类型 CGFloat 的指针。在正常使用情况下,您只能将指针与对象一起使用,而不是原始类型。
【解决方案2】:

您收到此错误是因为您试图访问一个不存在的变量(因此地址为 0x0)。通过_weight 访问getter 中的属性,它指的是ivar。

【讨论】:

  • 如果它是一个不存在的变量,它就不会编译。并且 ivar 不必命名为 _weight,如果属性是这样合成的,它可以是 weight。 OP 甚至声明 weight 是一个 ivar。不涉及财产。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2012-02-26
  • 2012-04-23
  • 1970-01-01
相关资源
最近更新 更多