2015-05-06 3 views
0

Я создал структуру в быстром. Но я пытаюсь получить значения местоположения - lat и lon в рамках. Код ниже компилируется, но значения местоположения не заполняются. Я уже добавил ключ NSlocationWheninUseUSageDescription в info.plist.Возможно ли получить местоположение в рамках iOS?

Может кто-нибудь сказать мне, возможно ли даже получить значения местоположения в рамках? Если да, то что тут делать?

Примечание: этот код отлично работает, если он добавлен в класс ViewController основного приложения. Но пользователь не получает сообщение авторизации, если этот код добавлен в фреймворк и вызван оттуда.

import Foundation 
import CoreLocation 


public class FrameworkInit : NSObject, CLLocationManagerDelegate { 


var locationManager = CLLocationManager() 
var lat = "" 
var long = "" 
var locflag = false 
var _appKey = "" 

func fetchLocation() 
{ 
    println("fetch loc called....") 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestWhenInUseAuthorization() 
    locationManager.startUpdatingLocation() 
} 

public func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) 
{ 
    var locValue:CLLocationCoordinate2D = manager.location.coordinate 
    lat = locValue.latitude.description 
    long = locValue.longitude.description 
    println("lat.....\(lat) \nlong...... \(long)") 
    self.locationManager.stopUpdatingLocation() 
    if !locflag { 

     SPDeviceRegister().saveDataOnDevice(_appKey, lat: lat, long: long) 

     SPReceiver().thresholdValueSetter() 

    } 
    locflag = true 
} 

public func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) 
{ 
    println("Error:" + error.localizedDescription) 
    if !locflag { 

     SPDeviceRegister().saveDataOnDevice(_appKey, lat: "0.0", long: "0.0") 

     SPReceiver().thresholdValueSetter() 
    } 
    locflag = true 
} 


public init(appKey: String) 
{ 
    super.init() 
    _appKey = appKey 
    self.fetchLocation() 
} 
} 
+0

возможно дубликат [Как я могу получить текущее местоположение пользователя в прошивке] (http://stackoverflow.com/questions/4152003/how-can-i-get-current-location-from- user-in-ios) –

+0

Даже если вы создаете фреймворк, вам все равно нужно получить разрешение от пользователя, чтобы получить места. Создает ли ваша структура какой-либо метод для управления необходимыми полномочиями «CLLocationManager» (и доступности)? –

+0

Хотя я новичок в разработке iOS, но этот код отлично работает, если он добавлен в ViewController основного приложения. locationManager.requestWhenInUseAuthorization() будет автоматически запрашивать авторизацию пользователя, используя значение для ключа NSLocationWhenInUseUsageDescription в файле info.plist. Но после добавления кода к пользователю Framework пользователь не получает сообщение авторизации. –

ответ

-1

Шаг 1:

Установите их в info.plist

NSLocationAlwaysUsageDescription 
NSLocationWhenInUseUsageDescription 

Шаг 2:

Initialise Расположение сене

Шаг 3:

Добавить CLLocationManagerDelegate в контроллер View и реализовать методы делегирования.

Шаг 4:

Набор делегатом менеджера местонахождения.

Шаг 5:

Установить расстояние и параметр точности для менеджера Местоположение.

Шаг 6:

Добавить запрос кода авторизации правильно. различен для вышеприведенном iOS8 и ниже iOS8

Шаг 7:

вызовов Location Manager, чтобы начать обновление.

+0

Приведенный выше код уже работает при добавлении в ViewController. Вопрос в том, можно ли заставить его работать внутри рамки, и если да, то как? Потому что он перестает работать внутри Framework. –

+0

проверить, звонил ли ваш делегат или нет. –

+0

Похоже, он не вызван. Даже пользователь не получает оповещение о авторизации доступа к местоположению. –

0

Наконец-то найдено решение, которое работает.

Хотя реализация может быть немного отличающейся для вашего сценария, но посмотрите на этот пример. Благодаря владельцу проекта.

https://github.com/icanzilb/OneShotLocationManager

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