iOS 개발 시작 후 발생한 문제

여러분은 개발할 때 백엔드에서 사용자의 위치 정보를 필요로 하는 것을 만났을 것입니다. 그래서 우리는 앞에서 위치를 정할 것입니다. 코드는 매우 간단합니다.
_locationManager = [[CLLocationManager alloc]init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[_locationManager startUpdatingLocation];

당신의view Controller가 CLLocation Manager Delegate 프록시를 실현하면 됩니다. 그리고 프록시 방법을 통해 사용자의 현재 위치를 즐겁게 얻을 수 있습니다.
- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations
{
        CLLocation *lastLocation = [locations lastObject];
        CLLocationCoordinate2D coordinate =lastLocation.coordinate;
        _latitude = coordinate.latitude;
        _longitude = coordinate.longitude;
        [manager stopUpdatingLocation];   
}

그리고 얻은 경위도 포스터를 백스테이지에 주시면 됩니다!
설마 정말 이렇게 간단하게 OK인가요?물론 아니지.제가 최근에 한 프로젝트에서 이런 위치 정보가 필요합니다. 그리고 위치 정보에 따라 근처 사용자의 목록을 얻을 수 있습니다. 이론적으로 이렇게 하면 절대 문제가 없지만 실제 프로젝트에서 이상한 문제가 발생할 수 있습니다.무슨 문제예요?요청된 데이터 중복
백그라운드 인원과 토론도 했고 인터페이스도 테스트했다. 물론 인터페이스의 문제가 아니었다. 그리고 나는 끊어서 문제를 찾기 시작했다. 도대체 어디에 오류가 발생했는지. 인터넷 요청 방법은 분명히 한 번만 사용했지만 얻은 데이터가 인터페이스에 나타난 것은 실제 데이터의 2배였다.
곧 문제를 찾았어요. 위의 그 대리 방법이 두 번이나 갔기 때문이에요!내가 인터넷에서 요청한 코드는 이 프록시 방법에 쓰면 틀림없이 두 번 요청할 거야. 데이터가 중복되지 않아야 착해.BUT [manager stopUpdatingLocation];이 코드가 위치 추적을 정지시켰잖아요. 어떻게 프록시 방법을 두 번이나 가요?많은 자료를 조사한 끝에 마침내 알아냈다.
원래는 포지셔닝을 처음 사용할 때 먼저 에이전트 방법을 사용하여 대략적인 현재 위치로 돌아왔다. 포지셔닝을 멈추게 했지만 실제로는 멈추지 않았다. 두 번째로 정확한 위치로 돌아간 후에야 멈추었다.문제가 마침내 명백해졌기 때문에 쉽게 해결할 수 있다. 표지판을 붙여라isLoc, 판단을 통해isLoc의 값 제어 프록시 방법 중의 네트워크 요청은 한 번만 요청합니다. OK 해결되었습니다!
프로젝트를 개발할 때 항상 각종 문제가 발생하고 자신의 문제를 공유하며 다음에 여러분들이 이 문제에 부딪히면 시행착오를 줄일 수 있기를 바랍니다!
 

좋은 웹페이지 즐겨찾기