简单的问题,但这给了我一个错误,我似乎无法解决它。
在我的对象(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
答案 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调用。