2016-07-08 2 views
0

Я пытаюсь отправить свою позицию в iOS и быстро, но через некоторое время приложение остановится и перестанет работать.CLLocation останавливается в IOS

class Location:NSObject, CLLocationManagerDelegate { 

private var locationManager = CLLocationManager() 
private var errorLocation: Bool = false 
private var stuffLocation: CLLocation! 

var outSocket: OutSocket! 
var timer: NSTimer! 
var stuff: Stuff! 

override init() { 
    super.init() 
    outSocket = OutSocket() 
    setupLocation() 
} 

func setupLocation() { 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.activityType = CLActivityType.Fitness 
    locationManager.allowsBackgroundLocationUpdates = true 
    locationManager.startUpdatingLocation() 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if !errorLocation { 
     errorLocation = true 
     locationManager.allowDeferredLocationUpdatesUntilTraveled(10, timeout: 50) 
     stuffLocation = locations[0] 
     if timer == nil { 
      timer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: #selector(Location.sendDataToServer), userInfo: nil, repeats: true) 
     } 
    } 
} 
} 
func locationManager(manager: CLLocationManager, didFinishDeferredUpdatesWithError error: NSError?) { 
    errorLocation = false 
} 

Это мой код, если кто-то сделал что-то похожее или знает, как предотвратить остановки APP, это оценят.

+0

Приложение перестает получать информацию GPS, поскольку каждое обновление событий GPS управляет данными для сокета TCP на моем сервере. Я читал, что iOS останавливает фоновые приложения, но не знаю много об этом. – Jarboox

+0

Приложение останавливается, когда я оставляю приложение самостоятельно. Например, когда я перехожу на Facebook или просто при блокировке устройства. – Jarboox

+0

Время, затрачиваемое на закрытие, составляет от 3 до 5 часов. Иногда mejos час. Но этого не произойдет, если я подключу dispositovo к Mac. – Jarboox

ответ

0

Если вы хотите, чтобы ваше приложение постоянно получало обновления местоположения GPS, пока оно находится в фоновом режиме, вы должны добавить запись в массив UIBackgroundModes в info.plist приложения, а затем вам нужно попросить пользователя получить разрешение. Сделайте поиск в документах Xcode по адресу UIBackgroundModes. В частности, посмотрите на значение location.

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

Обратите внимание, что вы собираетесь затопить аккумулятор пользователя в спешке, если вы постоянно держите GPS, И сокет TCP, чтобы загрузить координаты.

+0

Позволяет вам указать и добавить к вышеуказанной заявке, но по какой-то причине продолжать арестовывать. – Jarboox

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