我的类中有一个名为location的属性,它使用非原子的retain属性。但是,当我第一次将其分配给某些东西时,我收到了EXC_BAD_ACCESS错误。它崩溃了下面代码中的赋值:
- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
if(!self.location)
{
self.location =
[[Point2D alloc] initWithX:newLocation.coordinate.longitude Y:newLocation.coordinate.latitude];
}
从我记忆中使用retain属性时,它会自动释放当前对象并在合成时保留新对象。我在想它会抛出这个错误,因为我发布了一些不存在的东西。但有没有办法解决这个问题,还是我看错了?此外,当我使用变量本身时,它不会抛出错误,仅在self时。使用。
这也是我的Point2D类信息:
@interface Point2D : NSObject {
}
@property (nonatomic, assign) float x, y;
-(id)initWithX:(float)nx Y:(float)ny;
@end
@implementation Point2D
@synthesize x = _x, y = _y;
-(id)init
{
return [self initWithX:0.00 Y:0.00];
}
-(id)initWithX:(float)nx Y:(float)ny
{
self = [super init];
self.x = nx;
self.y = ny;
NSLog(@"initWithX");
return self;
}
@end
答案 0 :(得分:0)
检查newLocation以确保其引用和/或其坐标属性不返回空引用。
答案 1 :(得分:0)
您是否合成了该属性?我建议您首先检查一下。如果您收到if(!self.location)部分或者错误,可以查看调试器吗? self.location = [[Point2D alloc] initWithX ...... part?