Метод делегата не сработает (нулевой).Использование ARC - PullRequest
1 голос
/ 21 октября 2011

У меня проблемы с тем, чтобы мой метод делегата сработал. У меня есть следующий код:

@class Location;
@protocol LocationDelegate
- (void)location:(Location*)location foundLocation:(CLLocation*)location;
- (void)location:(Location*)location failedToLocateUserWithError:(NSError*)error;
@end 

@interface Location : NSObject {
    __unsafe_unretained id <LocationDelegate> delegate;
}

@property (nonatomic, assign) id <LocationDelegate> delegate;

@end

...
@implementation Location

@synthesize delegate;

- (void)startUpdatingLocation {
    NSLog(@"%@", delegate); // prints '(null)'
    ...

}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    NSLog(@"%@", delegate); // prints '(null)'
    [delegate location:self foundLocation:newLocation];
}

@end

Раньше нормально работал для других проектов, поэтому интересно, имеет ли это отношение к ARC? Объект, который выделяет Location, соответствует LocationDelegate. Я также устанавливаю делегата на себя. Но метод делегата просто не запускается, и если я его выводю, он будет нулевым.

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Где бы вы ни выделяли Location вы назначили делегата?Например: Location *location = [[Location alloc] init]; location.delegate = self;

0 голосов
/ 21 октября 2011

Из только что вставленного вами кода я не вижу ничего , которое удерживает вашего делегата (сохраненная ссылка).

Все, что вы вставили специальнопоказывает, что вы стараетесь не оставлять делегата в этом коде.

Если это так, как вы хотите, то вам лучше быть уверенным, что он был сохранен в другом месте - в противном случае ARC правильно сделает вывод, что, поскольку никто не имеет сильной (сохраненной) ссылки на делегата, это безопасно (иправильно), чтобы освободить его.

Объект, который выделяет Location, соответствует LocationDelegate.Я также устанавливаю делегата для себя.

И кто имеет сильную ссылку на этот объект?

...