Ios5 实例变量不保留值

Ios5 实例变量不保留值,ios5,clgeocoder,Ios5,Clgeocoder,我正在尝试使用CLGeocoder对象在ios5中转发一个地址,并将结果CLLocation放入实例变量中。出于某种原因,我可以设置实例变量,然后调用它的getter,但是该变量的值在Geocoder的完成处理程序的范围之外丢失 我在.h文件中声明了变量: @property (nonatomic, strong) CLLocation *specifiedPosition; 然后在my.m中合成它: @synthesize specifiedPosition = _specifiedPosi

我正在尝试使用CLGeocoder对象在ios5中转发一个地址,并将结果CLLocation放入实例变量中。出于某种原因,我可以设置实例变量,然后调用它的getter,但是该变量的值在Geocoder的完成处理程序的范围之外丢失

我在.h文件中声明了变量:

@property (nonatomic, strong) CLLocation *specifiedPosition;
然后在my.m中合成它:

@synthesize specifiedPosition = _specifiedPosition;
然后尝试像这样使用地理编码器-第一个NSLog返回纬度和经度,而第二个不返回:

-(void)getLatLong:(NSString *)locationText
{

if (!self.geocoder)
{
    self.geocoder = [[CLGeocoder alloc] init];
}

[self.geocoder geocodeAddressString:locationText completionHandler:^(NSArray *placemarks, NSError *error){

    if ( ([placemarks count] > 0) && (error == nil)) {

        self.specifiedPosition = [[placemarks objectAtIndex:0] location];
        NSLog(@"Specified Location variable is set to: %@", self.specifiedPosition);


    } else if (error == nil && [placemarks count] == 0){
        // TODO
        NSLog(@"Can't find data on the specificed location");
    }
    else if (error != nil){
        // TODO
        NSLog(@"An error occurred = %@", error);
    }

}];

NSLog(@"Specified Location variable is set to: %@", self.specifiedPosition);

}
我还尝试了自定义setter,但没有帮助:

-(void)setSpecifiedPosition:(CLLocation *)specifiedPosition
{
    _specifiedPosition = specifiedPosition;
}

提前感谢您的帮助

我不熟悉这个特定的API,但它使用一个名为completionHandler的块这一事实强烈表明这是一个异步操作。也就是说,稍后将从运行循环调用您的块。源代码中的第二个NSLog发生在调用completionHandler之前,因此它当然不会看到分配,因为它还没有发生


获得指定的位置数据后,无论需要做什么,都应该在completionHandler块内部、-setSpecifiedPosition:内部,或者在其中一个块通知/触发/调用的其他地方执行。

我认为这是正确的-查看时间戳会发现它们的顺序不正确。谢谢你@亚历克斯伯曼很高兴我能帮上忙。如果它最终解决了您的问题,请单击复选标记接受此答案。