EXC_BAD_ACCESS используя свойство retain? - PullRequest
0 голосов
/ 27 мая 2011

У меня есть свойство в моем классе, называемое 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, оно автоматически освобождает текущий объект и сохраняет новый объект при его синтезе.Я думаю, что это выдает эту ошибку, потому что я выпускаю то, чего там нет.Но есть ли способ обойти это, или я вижу все это неправильно?Кроме того, он не выдает ошибку, когда я использую саму переменную, только когда сам.

Вот также информация о моем классе 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

Ответы [ 2 ]

0 голосов
/ 27 мая 2011

Синтезировали ли вы свойство? Я предлагаю сначала проверить это. И вы можете проверить с помощью отладчика, если вы получаете сообщение об ошибке (!.... часть?

0 голосов
/ 27 мая 2011

Проверьте newLocation, чтобы убедиться, что его ссылка и / или его свойство координат не возвращают нулевую ссылку.

...