2016-11-01 3 views
0

사용자 위치 추적과 관련된 iOS 앱을 만들고 있습니다. 사용자가 어떤 viewcontroller에 관계없이 추적 할 위치를 원합니다. 사용자가 새 viewcontroller로 이동할 때마다 위치 업데이트를 켜고 끄지 않고이 일정한 위치 추적 효과를 얻는 방법이 있습니까? 어떤 종류의 싱글 톤이 필요합니까?XCode : 위치 업데이트를 매끄럽게 유지

+0

@boraseoksoon 모든 질문에 "감사합니다"를 추가하지 마십시오. 질문에 감사 할 일이 없어야하며, 이제 많은 질문을 던지 셨습니다. –

답변

0

ViewController가 아닌 다른 객체 클래스에서 locationManager 대리인을 구현하십시오. 그런 다음이 객체 내부에 var가 포함 된 위치를 만들고이 뷰를 모든 뷰 컨트롤러에서 사용합니다. 이 객체를 싱글 톤으로 사용하거나 컨트롤러간에 전달할 수 있습니다.

0

위치 관리자와 그 대리자를 사용하는 데는 여러 가지 방법이 있습니다. 일부는 애플리케이션 위임에 위치 관리자를 구현하는 것이 가장 좋으며, 다른 것은 모델 객체 위치를 제어하는 ​​동안 뷰 컨트롤러에서 위치 관리자를 사용하는 것입니다.

저는 Damian Dudycz가 제안한 것처럼 위치에 별도의 모델 클래스를 사용하는 것을 선호합니다. 이것은 싱글 톤일 필요는 없습니다. 예를 들어 앱에 필요한 모든 위치 정보를 제공하는 클래스를 정의 할 수 있습니다. 이 클래스는 앱에있는 위치 별 요구에 필요한 필수 속성과 메소드를 가지고 있습니다. 그 옆에서 프로젝트 기능의 백그라운드에서 위치 업데이트를 사용할 수 있습니다. 예를 들어, 당신은 다음이 클래스에서 같은 CLLocation 구체적인 방법을 넣을 수 있습니다

class myLocationClass: NSObject, CLLocationManagerDelegate { 

    //Properties 
    var myLocations = [CLLocations]() 
    var myGeocodeName = "" 
    var myDistanceCovered = 0.0 
    var myLocationManager : CLLocationManager? //You can also make this lazy to prevent optional properties 
    var ... etc. 

:

당신은 다음과 같은 클래스를 끝낼 수 있었다

func getLocationName(from location: CLLocation) { 
//Your reverse geocoding code here. 
} 

func locationManager(_ manager: CLLocationManager,   didUpdateLocations locations: [CLLocation]) { 
//Your location update stuff here. 
} 

을 당신이 할 수있는 당신의 다양한 뷰 컨트롤러에서 이제 모든 공개 속성 및 메서드를 호출하여 위치 업데이트를 시작하고 값을 가져오고 위치 업데이트를 중지합니다. 나는이 방법으로 해냈고 코드를 유지하는 데 많은 어려움을 겪었습니다. 왜냐하면 모든 위치 코드가 단일 클래스 내에 있기 때문입니다.

무승부로 인해 클래스가 상당히 커지고 유지하기가 어려울 수 있습니다. 나를 위해, 이것은 아직 일어나지 않았다.

희망이 도움이됩니다.