对象中的调用方法给出了SIGABRT

时间:2011-11-14 16:37:10

标签: iphone objective-c ios

简单的问题,但这给了我一个错误,我似乎无法解决它。

在我的对象(UIViewController)中,我在.h

中声明了一个方法
-(void)setCurrentLoc:(CLLocation *)loc;

.m

-(void)setCurrentLoc:(CLLocation *)loc
{
    currentLocation = loc;
}

一切都好。但这就是我启动这个对象的方式(工作正常)但是当我调用setCurrentLoc:时它给出了SIGBART

.h

IBOutlet VectorViewController *vectorView;

.m

vectorView = [[VectorViewController alloc] init];
...
//In another method I call:
[vectorView setCurrentLoc:location]; // Error/SIGBART line

我错过了什么吗?也许不是把它变成全球性的东西?

错误:

  

- [UIView setCurrentLoc:]:无法识别的选择器发送到实例0x841cab0

2 个答案:

答案 0 :(得分:1)

  

- [UIView setCurrentLoc:]:无法识别的选择器发送到实例0x841cab0

这意味着您将邮件发送到不再指向VectorViewController的指针,但现在指向UIView。这通常发生在对象已被自动释放或释放并重新使用内存时。

仔细检查创建vectorView与在其他方法中再次调用之间会发生什么。您似乎直接设置和访问实例变量 - 您应该通过属性访问它(很难具体而不知道您是否使用ARC)并确保这些属性被正确声明。

答案 1 :(得分:0)

根据您编写的代码,您不需要提供setCurrentLoc方法,而是使用属性代替并合成。

在VectorViewController类中

,使用:

@property (nonatomic, retain) IBOutlet CLLocation * currentLocation;
在@implementation中

,添加:

@synthesize currentLocation;

并在你的dealloc方法中添加:

self.currentLocation = nil;

保持现有的setCurrentLocation调用。