在viewDidLoad之外无法工作

时间:2014-11-09 18:30:24

标签: ios objective-c void viewdidload

我开始进行iOS编程,而且我一直在调用一个 无效方法。

请不要告诉我MKReverseGeocoding已被弃用。我知道。我需要使用xcode 3.4和IOS 4,所以,我没有选择。 (32位计算机)。

我已经制作了这个简化的void方法:

-(void)getAdress
{
    CLLocationDegrees lat=37.4217080;
    CLLocationDegrees lon=-122.0829964;            
    CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(lat, lon);        
    MKReverseGeocoder *reverseGeocoder=[[MKReverseGeocoder alloc] initWithCoordinate:coord];
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
}

如果我从viewDidLoad调用此void方法,则会找到该地址,我可以在控制台中以纯文本形式查看该地址。

- (void)viewDidLoad {
    [super viewDidLoad];
        ............
    [self getAdress];
}

但是,如果我尝试从另一种虚空方法中做到这一点,它就不起作用了。我尝试了很多东西,但控制台从不显示地址,虽然我可以看到NSLog消息"试图获得地址"在控制台......

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    ...................
    NSLog(@"Trying to get adress");
    [self getAdress];
}

我使用的reverseGeocoder方法:

- (void)reverseGeocoder:(MKReverseGeocoder *)reverseGeocoder didFailWithError:(NSError *)error {
    NSLog(@"The geocoder has returned: ERROR%@");
}

- (void)reverseGeocoder:(MKReverseGeocoder *)reverseGeocoder didFindPlacemark:(MKPlacemark *)placemark {
    NSLog(@"Reverse Adresse : %@", [placemark addressDictionary]);
}

1 个答案:

答案 0 :(得分:0)

您的问题可能是您的reverseGeocoder var在getAddress方法结束时超出范围。这可能导致在收到响应之前取消分配对象。

您可以考虑做的一件事是使用ivar而不是局部变量。