Как получить основной и дополнительный идентификатор маяка в didExitRegion

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

  1. Я не хочу отображать сообщение для каждой области выхода маяка. Например, если есть 3 маяка, я хочу отображать сообщение только тогда, когда я выхожу из всех 3 маяков. Возможно ли это сделать?

  2. А также я хочу получить основные и второстепенные значения маяка в didExitRegion

Я использовал следующий код:

-(void)locationManager:(CLLocationManager*)manager
   didRangeBeacons:(NSArray*)beacons
          inRegion:(CLBeaconRegion*)region
{
// Beacon found!
NSLog(@"iBeacons found");
//    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Successfully found" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show];

CLBeacon *foundBeacon = [beacons firstObject];

// You can retrieve the beacon data from its properties
NSString *uuid = foundBeacon.proximityUUID.UUIDString;
NSString *majorId = [NSString stringWithFormat:@"%@", foundBeacon.major];
NSString *minorId = [NSString stringWithFormat:@"%@", foundBeacon.minor];
NSLog(@"UUID: %@", uuid);
}

В приведенном выше коде я могу получить uuid, основной, второстепенный маяки. Но я хочу получить значения выходящего маяка в didExitRegion. Является ли это возможным?

Заранее спасибо.


person user3829418    schedule 15.07.2014    source источник


Ответы (2)


Используйте изменяемый массив, чтобы отслеживать детали региона обнаруженного маяка. И обновите этот массив с обнаружением новых областей маяка. Как код ниже

В методе делегата didDetermineState добавить

- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
    if(state == CLRegionStateInside)
    {
        [regions addObject:region]; // regions is the mutable array 
    }
}

И с помощью метода didExitRegion добавьте

// Tells the delegate that the user left the specified region. 
    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
    {
        [regions removeObject:region];
        CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
        NSLog(@"\nExited region id: %@",beaconRegion.identifier);
        NSLog(@"\nExited region major: %@",beaconRegion.major);
        NSLog(@"\nExited region minor: %@",beaconRegion.minor);

       // Add a check with regions array here to show the custom alert message

    }
person Alex Andrews    schedule 15.07.2014
comment
Я попробовал ваше решение, я получаю UID, но основные и второстепенные значения равны нулю. Любая помощь будет благодарна :) - person Vinoy Alexander; 26.08.2014

Я не хочу отображать сообщение для каждой области выхода маяка. Например, если есть 3 маяка, я хочу отображать сообщение только тогда, когда я выхожу из всех 3 маяков. Возможно ли это сделать?

Ваши требования не кажутся полностью ясными. Если эти три маяка описываются одним регионом, который вы отслеживаете, то все просто: вы получите только одно сообщение didExitRegion:, когда покинете диапазон последнего маяка в регионе. В противном случае предложение Алекса выше кажется разумным: отслеживайте регионы, в которые вы входите и выходите, затем условно выполняйте некоторый код в didExitRegion:, когда количество регионов, в которых вы сейчас находитесь, падает до нуля.

А также я хочу получить основные и второстепенные значения исходящего маяка в didExitRegion

Я не уверен, что «выходящий маяк» здесь четко определен (вы имеете в виду, скажем, последний маяк в регионе, из которого вы вышли, и, следовательно, вызывает сообщение didExitRegion:?), но в любом случае вы не можете получить то, что вы спрашиваете здесь. Если Alex регистрирует major и minor, это атрибуты отслеживаемой области (и, в данном случае, выхода), а не какого-либо конкретного маяка.

person Paul A. Hoadley    schedule 05.09.2015