当我在我的设备上启动应用程序时,在连接到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);
}
} ];
}
}
答案 0 :(得分:0)
这是在你的Main / Root / MasterViewController的viewDidLoad中调用的吗? (从AppDelegate启动的那个)。如果是这样,则此方法仅在应用程序首次启动时调用,而不是从后台恢复时调用。作为实验,请将方法调用[self retrieveData]
移至viewWillAppear:
从更多信息中编辑回答:您可能会从后台线程调用警报视图show
方法,而当您处于调试模式时,它仍在工作,但是一旦你没有调试器启动,它就会迷路。应始终从主线程调用UI方法,因此在[alert show]
行上放置一个断点并查看它正在使用的线程。要解决此问题,请将行更改为[alert performSelectorOnMainThread:@selector(show)]
。我希望这最终能解决你的问题。