2015-10-05 49 views
3

didRangeBeacons方法幾乎被稱爲iOS 9中的每秒鐘時間爲40次。但是,在iOS 8及其以下版本的中,每秒只能撥打一次。正因爲如此,我們在didRangeBeacons中的代碼邏輯不能按預期工作。iOS 9 didRangeBeacons多次調用。 iOS-8每秒鐘一次

重現步驟:

  1. 你的任何視圖控制器或AppDelegate中的,添加CLLocationManager代表。
  2. 初始化位置管理器。
  3. 開始測距 -

    [self.locationManager startRangingBeaconsInRegion:savedRegion]; 
    
  4. 只看到如何頻繁didRangeBeacons獲取調用。

預期結果: 應該得到所謂的每秒一次。

實際結果: 獲取調用40餘次每秒

版本: 的iOS 9及以上

+0

您定義並啓用了多少個'Region'對象?你確定你沒有每秒得到4個回調,每個區域有一個回調? iOS 8中的 – davidgyoung

+0

- 如果範圍爲一個區域,則每秒調用一次,如果範圍爲2個區域,則每秒調用兩次。在iOS 9中 - 在一個區域範圍內每秒調用一次。然而,當涉及2個地區 - 它變得非常難以預測。每秒幾次,有時每秒20-30次。我不確定它是iOS-9的bug還是故意改變? –

+0

你看到這個iOS的確切版本?在下面的答案中看到我的測試結果無法重現9.0.2 – davidgyoung

回答

1

請務必不要在更改任何CLLocationManager屬性didRangeBeacons方法。這將導致CLLocationManager再次調用didRangeBeacons,並且您將在一秒鐘內完成大量更新。

我已經在'startUpdatingLocation'中體會到了這一點,但應該有結果。

+0

謝謝。幫助我進行調試。我開始在didRangeBeacons中進行位置更新,並且在didUpdateLocations中我正在重新啓動範圍已經不等的信標區域。因此,增加了每個重複區域(相同的UUID,標識符和主要)的RangeRaacon。 有趣的是,iOS8似乎已經考慮重複,如果它已經在一個區域範圍內重新啓動,則不會重新啓動。 iOS9似乎沒有這樣做。 –

+0

酷,很高興它確實幫助你:)這確實很有趣,爲什麼iOS8不同於iOS9。 –

+0

我錯過了這個評論,@MadhuVSwamy。既然你已經解決了這個問題,請創建一個新的答案你自己的問題並接受它。 (您必須等待24小時,然後才能接受自己的答案。) – davidgyoung

0

聽到這個報道的多個報道,我試圖重現這個沒有成功。對於測試設置,我創建了一個CLBeaconRegion對象並註冊了它。然後,我計算回調數爲didRangeBeaconsInRegion的方法,並將其除以測試開始後的秒數,以獲得每秒回調的測量值。

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc]initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] identifier:@"test"]; 
[self.rangingLocationManager startRangingBeaconsInRegion: region]; 

... 

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)iBeacons inRegion:(CLBeaconRegion *)region { 
    if (startTime == nil) { 
    startTime = [[NSDate alloc] init]; 
    } 
    long secsSinceStart = -[startTime timeIntervalSinceNow]; 
    callbacks++; 
    NSLog(@"Ranging callbacks per second: %1.2f", 1.0*callbacks/secsSinceStart); 
} 

這裏是我的結果從的NSLog:

IOS版本:9.0.2(13A452) 手機型號:iPod Touch的ME643LL/A

2015年10月9日17:20 :02.660 beaconTest [214:7044]每秒測距回調:1.03

IOS版本:8.3(12F69) 手機型號:iPod touch的ME978LL/A

2015年10月9日17:27:35.842 beaconTest [629:242941]測距每秒回調:1.02

,我無法重現並不意味着這個問題是不存在的事實。這可能是iOS 9的早期版本比當前可用的問題。它可能只存在於我無法測試的特定條件下。

但是,可以得出結論,並非所有9.0.2版本的iOS設備都會遇到此問題中描述的症狀。

+0

只有當我們重新開始測量已經測量的區域時,您才能夠對此進行模擬。爲了處理暫停狀態,我必須這樣做。 這在iOS 8中工作正常。不知何故,iOS9將其視爲一個新的區域並重新啓動測距,因此重複回調。 –