应用程序在 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&lt;0.3) 我添加了一个 else other alert 。并且它显示另一个警报...距离变量在 Xcode 连接时发生变化,而在未连接的位置。有什么想法吗?

以上是关于应用程序在 Xcode 上连接设备时显示警报视图,否则不会的主要内容,如果未能解决你的问题,请参考以下文章

单击链接时显示警报视图

NewsStand,在需要时显示推送通知警报视图?

如何仅在应用程序首次启动时显示警报显示?

Xcode 未在提交时显示我的某些视图控制器 (GitHub)

将 SwiftUI 警报或操作表绑定到值类型模型属性的可选性(当属性为 nil 时显示视图)的好方法是啥?

Android - 以编程方式检查互联网连接并在未连接时显示对话框