Методы didexit региона менеджера маяка неоднократно вызываются

Я наблюдаю за 3 регионами. Но вход в регион и методы didexitregion повторяются, даже если приложение находится внутри региона. Мне нужны уведомления только тогда, когда приложение входит или выходит из любого 3 региона. Это происходит потому, что я неоднократно тестирую приложение

Вот мой код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {


STCloudManager setupAppID:@"valid is" andAppToken:@"valid token"];    


    UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if (locationNotification) {
        // Set icon badge number to zero
        application.applicationIconBadgeNumber = 0;
    }

    self.beaconManager1= [[ESTBeaconManager alloc]init];
    self.beaconManager1.delegate = self;
    self.beaconManager1.avoidUnknownStateBeacons=YES;
    self.beaconManager1.preventUnknownUpdateCount=YES;
    NSSet *set=[self.beaconManager1 monitoredRegions];
    self.region_desk=[[CLBeaconRegion alloc]
                      initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID major:36798 minor:29499
                      identifier:@"Appdelegate_Desk_Beacon_Region"];

    self.region_door1=[[CLBeaconRegion alloc]
                       initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID major:29666 minor:63757
                       identifier:@"Appdelegate_Door_Beacon1_Region"];

    self.region_door2=[[CLBeaconRegion alloc]

  initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID major:64157 minor:33188
                       identifier:@"Appdelegate_Door_Beacon2_Region"];


    [self.beaconManager1 requestAlwaysAuthorization];


    //already monitoring
    if ([set count]<3) {

        if (![set containsObject:self.region_desk]) {

             [self.beaconManager1 startMonitoringForRegion: self.region_desk];
        }

        //
        if (![set containsObject:self.region_door1]) {

              [self.beaconManager1 startMonitoringForRegion: self.region_door1];
        }
        if (![set containsObject:self.region_door2]) {

            [self.beaconManager1 startMonitoringForRegion: self.region_door2];
        }




    }



    return YES;
}

2 ответа

Решение

Вы должны перезагрузить устройство.

В iOS 20 экземпляры региона хранятся в ОС. Я думаю, что он постоянно помещает экземпляры региона в этот массив областей ОС. Вы должны заполнить массив некоторой случайной областью или перезапускать устройство после каждого теста.

Это связано с регионом экземпляра ранее установленного приложения.

Эта проблема исчезнет после перезагрузки устройства.

Другие вопросы по тегам