如何让一个块运行一次,但每次我调出一个viewController?

时间:2013-09-15 13:36:25

标签: ios objective-c objective-c-blocks

好的,所以我认为我已经解决了这个问题,但碰到了另一个......

我获取用户的位置,然后使用他们的坐标来查找他们当前所在的邮政编码,但是当我在块内运行它时,它只会向控制台注销一次。当我尝试在另一种方法中运行块时,它会使用相同的邮政编码大量吐出。

我的问题是,我如何制作它以便块打印一个邮政编码,并且每次启动视图控制器时都会这样做。?

//user's location
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    [locationManager startUpdatingLocation];



        CLGeocoder *fgeo = [[CLGeocoder alloc] init];
        [fgeo reverseGeocodeLocation:locationManager.location completionHandler:^(NSArray *placemarks, NSError *error) {
            if (!error) {
                CLPlacemark *placemark = [placemarks objectAtIndex:0];
                zip = placemark.postalCode;

                NSLog(@"%@", zip);
                //[self jsonRequest];

2 个答案:

答案 0 :(得分:1)

  

当我尝试以另一种方法运行该块时,它吐出了大量的   所有时间都使用相同的邮政编码。

一旦它输入了返回语句中的If(!error),那就应该解决问题。

答案 1 :(得分:0)

覆盖viewDidAppear并将代码放在那里。这被称为视图控制器出现的每个时间。如果您希望在创建视图控制器并且即将显示时仅调用一次,则覆盖viewDidLoad

如果您希望它只被调用一次,但特别是在屏幕上显示视图后,您必须检查viewDidAppear中的某些内容,以指示它是否第一次出现。您可能需要在viewDidLoadinit中设置一个标记,然后在第一次调用viewDidAppear时取消设置。