应用程序在Xcode上连接设备时显示alertview,否则不显示

时间:2014-05-03 13:55:08

标签: ios objective-c xcode cocoa-touch web

当我在我的设备上启动应用程序时,在连接到Xcode时,它完美运行。 当我从iPhone上的多任务中删除它后再次启动它(所以不用点击Xcode上的运行按钮),它再也不能正常工作了。

有效的是:

在我的viewDidLoad中,我致电[self retrieveData];

这是retrieveData方法:它从web获取数据: 当连接到Xcode时,它可以很好地工作。

但是当我从iPhone启动应用程序而没有从Xcode界面上的“运行”按钮启动它时,locationManager: didUpdateTolocation方法未正确调用,因为我的应用程序运行不正常。

更好理解的其他信息: 在iPhone模拟器上弹出显示。在从Xcode启动的iOS设备上弹出显示。我不知道为什么当我从没有Xcode的iPhone启动时弹出的电缆没有显示,我想didUpdateToLocation不能正常工作。任何的想法 ?

编辑后发表评论:

#pragma mark - Update Location
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{

    CLLocation *currentLocation = newLocation;
    NSLog(@"didUpdateToLocation: %@", newLocation);

    if (currentLocation != nil) {
        // On affiche la longitude et latitude
        longitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
        latitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];

        CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude];

        float distance = [userLocation distanceFromLocation:locDatabase];
        NSLog(@"la distance est de : %f", distance);
        if(distance<0.03)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Joleju" message:@"Vous entrez dans la zone!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        }

        // ---------------------------------------------------------------------------------------------------------------------------

        // Reverse Geocoding
        NSLog(@"Resolving the Address");
        [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
            NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
            if (error == nil && [placemarks count] > 0) {
                placemark = [placemarks lastObject];
                adressLabel.text = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
                                    placemark.subThoroughfare, placemark.thoroughfare,
                                    placemark.postalCode, placemark.locality,
                                    placemark.administrativeArea,
                                    placemark.country];
            } else {
                NSLog(@"%@", error.debugDescription);
            }
        } ];

    }
}

1 个答案:

答案 0 :(得分:0)

这是在你的Main / Root / MasterViewController的viewDidLoad中调用的吗? (从AppDelegate启动的那个)。如果是这样,则此方法仅在应用程序首次启动时调用,而不是从后台恢复时调用。作为实验,请将方法调用[self retrieveData]移至viewWillAppear:

从更多信息中编辑回答:您可能会从后台线程调用警报视图show方法,而当您处于调试模式时,它仍在工作,但是一旦你没有调试器启动,它就会迷路。应始终从主线程调用UI方法,因此在[alert show]行上放置一个断点并查看它正在使用的线程。要解决此问题,请将行更改为[alert performSelectorOnMainThread:@selector(show)]。我希望这最终能解决你的问题。