Я хочу вставить таймер, чтобы избежать изменения обратно между «далеким», «близким», «немедленным» состоянием.didRangeBeacons Делегат вызывает CLProximityNear и CLProximityFar слишком быстро
Я использую тот же вид для «далекого» и «ближнего» состояний, но я нажимаю новый вид для немедленного состояния.
Таким образом, для немедленного случая для возвращения в корень, у меня есть найти решение, делая это:
[self performSelector:@selector(patchSelectorPopToRoot) withObject:nil afterDelay:4];
Как я могу сделать для «ближнего» и «дальнего» состояние, если я использую тот же вид ?
Это делегат:
-(void)beaconManager:(ESTBeaconManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(ESTBeaconRegion *)region
{
// Descriptor on distance to sort the array of beacons by distance
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
// Sorting the array of beacons
// Beacon array is sorted based on distance
// Closest beacon is the first one
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
if([self.beaconsArray count] > 0)
{
if(!self.selectedBeacon)
{
// initialy pick closest beacon
self.selectedBeacon = [beacons objectAtIndex:0];
currentBeaconMinor = self.selectedBeacon.minor;
}
else
{
//Sorting the array of beacons
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
//Updating the selected beacon with the first element of the array (closest beacon)
if(self.selectedBeacon != [beacons objectAtIndex:0])
{
self.selectedBeacon = [beacons objectAtIndex:0];
currentBeaconMinor = self.selectedBeacon.minor;
}
}
// Switch on proximity of the closest beacon
switch (self.selectedBeacon.proximity)
{
case CLProximityUnknown:
{
[self DoOnProximityUnknow];
break;
}
case CLProximityImmediate:
{
[self DoOnProximityImmediate];
break;
}
case CLProximityNear:
{
[self DoOnProximityNear];
break;
}
case CLProximityFar:
{
[self DoOnProximityFar];
break;
}
default:
break;
}
self.beaconsArray = [beacons sortedArrayUsingDescriptors:sortDescriptors];
}
}
это метод, в котором я хочу использовать таймер (Near).
-(void)DoOnProximityNear
{
//Starting a timer
//not working :
//[NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(timerCalled) userInfo:nil repeats:NO];
//not working
/*
double delayInSeconds = 20.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
NSLog(@"Do some work");
});*/
}
Я просто хочу, чтобы таймер 20 секунд находился внутри моего метода «Near». Я хочу остаться не менее 20 секунд, прежде чем вернуться на «Дальний».
Куда мне вставить этот таймер? Должен ли я ждать длинного сигнала, запускать таймер и ждать другого дальнего сигнала, или я должен запустить таймер, когда я приеду близко?
Пожалуйста, как я могу исправить эту проблему?
Заранее за вашу помощь.
Решение можно найти здесь. http://stackoverflow.com/questions/22627580/proximity-range-for-beacons-changes-back-and-forth-even-when-the-app-is-in-the-s/22628608? noredirect = 1 # comment45017403_22628608 Благодаря Paulw11. –