应用程序在 Xcode 上连接设备时显示警报视图,否则不会
Posted
技术标签:
【中文标题】应用程序在 Xcode 上连接设备时显示警报视图,否则不会【英文标题】:Application showing alertview when device connected on Xcode otherwise not 【发布时间】:2014-05-03 13:55:08 【问题描述】:当我在我的设备上启动我的应用程序并连接到 Xcode 时,它运行良好。 当我在 iPhone 上从多任务中删除它后再次启动它时(所以没有点击 Xcode 上的运行按钮),它不再工作了。
有效的是:
在我的viewDidLoad中,我调用[self retrieveData];
这里是retrieveData 方法:它从网络获取数据: 它在连接到 Xcode 和不连接时都能完美运行。
但是当我从 iPhone 启动应用程序而不从 Xcode 界面上的“运行”按钮启动它时,locationManager: didUpdateTolocation
方法不会被正确调用,因为我的应用程序不能正常运行。
为了更好地理解的附加信息: 在 iPhone Simulator 上弹出显示。在从 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】:这是在 Main/Root/MasterViewController 的 viewDidLoad 中调用的吗? (从您的 AppDelegate 启动的那个)。如果是这样,此方法只会在应用程序首次启动时调用,而不是在从后台恢复时调用。作为一个实验,将方法调用[self retrieveData]
移动到viewWillAppear:
从更多信息中编辑的答案:您的警报视图 show
方法可能是从后台线程调用的,当您处于调试模式时,它仍在工作,但只要您在没有调试器的情况下启动,它会丢失。 UI 方法应该总是从主线程调用,所以在[alert show]
行上放一个断点,看看它正在使用哪个线程。要修复它,请将行更改为[alert performSelectorOnMainThread:@selector(show)]
。我希望这最终能解决你的问题。
【讨论】:
您好,感谢您的回答!是的,它是从我的 masterviewcontroller 中的 viewDidLoad 调用的。我知道从后台恢复时不会调用它。在再次启动它之前,我将它从背景中移除。因此,即使从 viewDidLoad 它也应该可以正常工作。我试图从 viewWillAppear 中检索数据:它仍然不起作用。这根本不正常……如果您有想法,请与我分享。 在retrieveData 方法的第一行发出警报,看看它是否被调用了。 感谢您的回答。我刚刚尝试了 NSLogs,并从 viewDidLoad 和 viewWillAppear 中调用了 retrieveData。现在有一个巨大的变化:即使不是从 Xcode 启动,我也验证了数据是否来自设备,并且完全下载!所以问题解决了。但我也明白问题不在于那个。我不知道为什么,当位置匹配时,我的警报没有显示。当我从 Xcode 启动时,会显示警报。当我不从 Xcode 启动时,警报不会显示,即使我正在处理的数据与我启动时完全相同(我使用 nslogs 和其他东西进行了验证) 感谢您的回答,这是对您已编辑答案的新评论:在(if distance<0.3)
我添加了一个 else other alert
。并且它显示另一个警报...距离变量在 Xcode 连接时发生变化,而在未连接的位置。有什么想法吗?以上是关于应用程序在 Xcode 上连接设备时显示警报视图,否则不会的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 未在提交时显示我的某些视图控制器 (GitHub)