2014-01-18 11:56:49.828 sunlandbeacon[1385:60b] Enter Inactive mode
2014-01-18 11:56:49.848 sunlandbeacon[1385:60b] EnterBackgroundMode
with Badge 02014-01-18 11:57:28.629 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:57:29.305 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 12014-01-18 11:57:29.307 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 12014-01-18 11:58:15.173 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:58:15.176 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:58:15.178 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:58:15.880 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 22014-01-18 11:58:15.886 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 12014-01-18 11:58:16.175 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 32014-01-18 11:58:16.184 sunlandbeacon[1385:60b] Enter Region 2 with
flagvalue 22014-01-18 11:59:02.784 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:59:02.787 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:59:02.790 sunlandbeacon[1385:60b] Exit a beacon range
2014-01-18 11:59:03.491 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 42014-01-18 11:59:03.493 sunlandbeacon[1385:60b] Enter Region 1 with
flagvalue 12014-01-18 11:59:03.792 sunlandbeacon[1385:60b] Local Notification
Happens with Badge 52014-01-18 11:59:03.796 sunlandbeacon[1385:60b] Enter Region 2 with
flagvalue 2
解决方法
在没有看到您的代码的情况下,很难确定这是发生了什么,但如果是,您可以通过在退出时添加软件过滤器并输入事件来轻松解决这个问题.如果在前几秒内发生同一区域的条目事件,则基本上忽略退出事件.同样,如果同一区域的退出事件在前几秒内发生,则忽略条目事件.
为此,您需要保留两个表,一个包含按区域键入的最新条目事件,其中包含按区域键入的最新退出事件.
下面是一个放在didEnterRegion回调方法顶部的代码示例,该方法使用名为_enteredTimes的类级NSMutableDictionary作为查找表来完成此任务:
NSDate *Now = [[NSDate alloc] init]; CLBeaconRegion *beaconRegion = (CLBeaconRegion *) region; Nsstring *regionKey = [Nsstring stringWithFormat: @"%@_%@_%@",beaconRegion.proximityUUID,beaconRegion.major,beaconRegion.minor]; NSDate *lastEntered = [_enteredTimes valueForKey:regionKey]; [_enteredTimes setValue: Now forKey: regionKey]; if (lastEntered != Nil && [Now timeIntervalSinceDate:lastEntered] < 10) { // last 10 secs // ignore this event return; }
您必须在didExitRegion回调中输入等效代码.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。