2016-12-24 6 views
1

Я использую NSTimer в своем приложении для iOS, разработанном в Xamarin. Приложение отлично работает на iOS 10 (iPhone 5S), но падает на моем iPad с iOS 9.3.5.
Почему это происходит и как я могу это исправить?NSTimer - работает на iOS 10, но не на iOS 9.3

Вот код:

timer = NSTimer.CreateScheduledTimer(0.3, true, delegate 
{ 
    List<String> keys = this.beaconRegions.Keys.ToList(); 
    foreach (string identifier in keys) 
    { 
     this.locationManager.StopRangingBeacons((CLBeaconRegion)this.beaconRegions[identifier]); 
     this.locationManager.StopMonitoring(this.beaconRegions[identifier]); 
     this.locationManager.StartMonitoring(this.beaconRegions[identifier]); 
     this.locationManager.StartRangingBeacons(this.beaconRegions[identifier]); 
    } 

}); 

А вот деталь журнала аварии:

4 CoreFoundation     0x21c9a234 0x21c72000 + 164404 

5 iBeacon       0x0023564c wrapper_managed_to_native_ObjCRuntime_Messaging_objc_msgSend_intptr_intptr_double_bool_intptr (/<unknown>:1) 

6 iBeacon       0x001e8ecc Foundation_NSTimer_CreateScheduledTimer_double_bool_System_Action_1_Foundation_NSTimer (NSTimer.g.cs:134) 

7 iBeacon       0x001de5b4 iBeacon_LocationManager_turnOnMonitoring (LocationManager.cs:277) 

8 iBeacon       0x001de2ac iBeacon_LocationManager_startMonitoringForBeacons (LocationManager.cs:250) 

LocationManager.cs:277 - это строка кода, где у меня есть код для NStimer.

+1

Я не парень из xamarin, но мне интересно, переводит ли это на основе блока API NSTimer (см. ['schedTimer (withTimeInterval: repeat: block:)'] (https://developer.apple.com/reference/foundation/timer/2091889-scheduledtimer)), который был введен в iOS 10. Вам нужно использовать старый ' target'/'selector', если вы собираетесь поддерживать более ранние версии iOS. – Rob

+0

@ Kyll ok получил его. –

ответ

2

@Rob является правильным. Вы должны использовать другие методы, если вы настроите iOS 9 или ниже.

Этот код приводит к реализации нового блока синтаксиса, который не доступен в версиях IOS до прошивки 10:

[ObjCRuntime.Introduced (ObjCRuntime.PlatformName.iOS, 10, 0, ObjCRuntime.PlatformArchitecture .None, нуль)]

https://developer.xamarin.com/api/member/Foundation.NSTimer.CreateScheduledTimer/p/System.Double/System.Boolean/System.Action%7BFoundation.NSTimer%7D/

+0

Хорошо, так какой альтернативный метод есть, который будет работать на предыдущей версии iOS? – Darshana

+0

@darshana Мое приложение 9.3 легко справилось с Nstimer. В вопросе Part! – UserID0908

 Смежные вопросы

  • Нет связанных вопросов^_^