转换到另一个ViewController

时间:2016-05-27 09:59:52

标签: ios objective-c

我想在用户位于特定位置时在我的应用中显示提醒视图。另外,我只想呈现此警报视图一次。为了这, 我有以下代码:

if(!hasShownAlertview && GMSGeometryContainsLocation(userLocation.coordinate, testPath, YES)){
            hasShownAlertview = YES;

            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message@"Body" preferredStyle:UIAlertControllerStyleAlert];

            UIAlertAction *yesAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"YES", nil) style:UIAlertActionStyleDefault handler:
                                             ^(UIAlertAction *action){
                                            }];

            UIAlertAction *noAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"NO", nil) style:UIAlertActionStyleDefault handler:
                                        ^(UIAlertAction *action){
                                        }];

            [alertController addAction:noAction];
            [alertController addAction:yesAction];
            [self presentViewController:alertController animated:YES completion:nil];
    }
}

问题是:如果我转到另一个ViewController,当用户仍在该位置时,会在该ViewController上再次显示警报视图。这背后的原因是hasShownAlertview在新的ViewController出现之前被设置回NO,因此警报视图再次显示。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

您可以在hasShownAlertview中声明appdelegate,并可以在应用中的任何位置使用它来检查是否为是。你应该强烈参考那个属性,因此它不是dealloc。

答案 1 :(得分:0)

通过在hasShownAlertview文件中将static声明为.m来解决此问题。

答案 2 :(得分:0)

如果你想在多个文件中使用静态hasShownAlertView变量,你应该这样做。

Appelegate.h,delcare

@property (assign) bool hasShownAlertView;

在您要检查或更改值的任何文件中,您都可以通过

获取hasShownAlertView变量
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
bool hasShownAlertView = appDelegate.hasShownAlertView;