2011-12-19 3 views
0

현재 현재 위치를 기반으로 한 인근 광고를 보여주는 응용 프로그램을 만들고 있습니다. 사용자가 응용 프로그램을 처음 시작하면 가장 가까운 10 개의 광고를 보게됩니다.IOS 위치 탐지가 감지되었습니다.

정시에 위치를 가져 오는 데 약간의 문제가 있습니다. 내 문제는 뷰가로드되기 전에 아직 현재 위치를 반입하지 ​​않는다는 것입니다. 물론 델리게이트 UpdatedLocation이 있지만,이 위치는 여러 번 해고됩니다. 가장 정확한 위치를 가져 오려고하기 때문에 여러 번 발사되는 것 같아요?

내 질문은; 위치를 찾을 때까지 '대기'한 다음 광고 검색을 시작하려면 어떻게해야합니까?

미리 감사드립니다.

감사합니다, Mittchel

+0

위치가 결정되고 있음을 나타내는 텍스트와 회 전자를 표시합니다. 위치를 얻은 후 실제 위치를 보여줍니다. 또는 나는 무엇인가 놓치 느냐? – DarkDust

+0

그래, 내가 말했듯이 그것은 여러 위치를 찾는다. 그래서 내가 필요한 것을 어떻게 결정할 수 있는가? – Mittchel

답변

1

당신은보기 당신이 (더 정확한) 위치를 얻을 때마다 업데이트해야합니다. 따라서 마지막 위치를 기억하고 horizontalAccuracy/verticalAccuracy이 감소했는지 (더 작 으면 더 정확하지만 부정적 = 무효) 확인하십시오. 어쩌면 새로운 위치를 얻을 때마다 업데이트하는 것이 정확도가 변경되지 않을 수도 있지만 위치가 변경되기 때문에 더 좋을 것입니다 (사용자가 이동 중임).

목록 만 표시하면 이전 결과를 기억해야합니다. 새로운 결과를 가져오고, 차이가 나는 경우 목록을 업데이트하십시오.

+0

그게 무슨 문제가 있니, 나는 매번보기를 업데이트 할 수 없다. 내 ViewDidLoad에서 결과를 가져오고 있습니다. (그리고이 방법을 원합니다). 의미, 내가 매번 결과를 가져 오려고 할 때마다 뷰를 업데이트하면 .. – Mittchel

+0

@Mittchel : 충분한 위치 데이터가있을 때까지 뷰를로드하지 마십시오. – progrmr

1

CLLocationManager가 코어 위치 시스템에서 업데이트 된 히트를 가져 오면 해당 위임자의 didUpdateToLocation:fromLocation: 메서드가 실행됩니다. 이 방법을 사용하면 업데이트 된 위치를 얻을 때 무엇을하길 원할 것입니다.

귀하의 경우 새로운 위치의 .horizontalAccuracy 속성이 고품질 결과인지 확인하고 싶을 것입니다. CL은 새로운 위치 세션의 첫 번째 히트로서 마지막 위치 세션의 마지막 히트를 제공 할 것이므로 처음 몇 개를 고정시켜야 할 수도 있습니다.

어느 쪽이든 그것은 데이터 가져 오기를 수행하려는 방법입니다.

+0

나는 그것을 시도 할 것이다, 고마워. 그러나 그것이 언제 마지막으로 업데이트 된 장소인지 확실히 알 수 있습니까? – Mittchel

+0

@Mittchel : 마지막 업데이트 된 위치가 없으므로 언제든지 정확성이나 위치 변경 사항을 영원히 계속받을 수 있습니다. 충분하면'stopUpdatingLocation'을 호출하고 가지고있는 것을 사용하십시오. – progrmr

1

위치가 하나도 없으므로 CL에서 일련의 위치를 ​​얻은 다음 캐시 된 위치와 시간 경과에 따라 정확도가 다른 위치에서 더 나은 (또는 나쁜) 정확도를 얻을 수 있습니다. 위치는 1 초에서 10 분까지입니다.

CL은 캐시 된 위치를 제공하기 시작합니다. 캐시 된 위치는 사용자의 목적에 충분할 수 있습니다. 너무 오래되지 않은 경우 (< 60 초) 합당한 정확도를 유지하고 캐시 된 위치를 사용하면 금식 결과가됩니다. 그렇지 않으면 충분히 좋은 정확도를 기다려야합니다 (충분한 것을 결정해야합니다, .horizontalAccuracy을보십시오).

viewDidLoad가 호출되기 전에 (viewWillAppear이 더 좋은 장소가 될 것임) 위치 지정을 주장하는 경우 충분한 위치가 될 때까지 해당 viewController를 밀어 넣지 않아야합니다. 어떻게하는지는 뷰 컨트롤러가로드되는 방법에 따라 다릅니다.

0

내가하는 일은 다음과 같습니다. 보기를로드하고 viewDidAppear에서 메소드를 호출하여 위치를 업데이트하십시오. 나는이라는 github에서 멋진 오픈 소스 프로젝트를 사용 해왔다. 작업이 끝나면 다양한 진행 표시기가 화면에 표시됩니다 (사용자가보기를 떠나지 못하도록 차단합니다). 또한 앱이 멈추지 않고 작동 중임을 사용자에게 시각적으로 알려줍니다.

정확도 문제를 해결해야하지만 진행보기에서는보기를로드하고 필요한 것을 끌어들이는 동안 사용자의 관심을 유지할 시간을줍니다. UI 유체를 유지합니다.