Jak przechowywać CLLocationCoordinate2D?

Próbuję zbudować aplikację, która buduje i zapisuje trasy podobne do mapowania mojego biegu. UżywamBreadcrumb przykładowy kod, szczególnieCrumbPath iCrumbPathView jako podstawa moich tras, od Apple. Dwa pytania:

Jeśli spróbuję uzyskać dostęp doMKMapPoint *points obiektCrumbPath w ten sposób:

[_route lockForReading];
NSLog(@"%@", _route.points);
NSLog(@"%d", _route.pointCount);
[_route unlockForReading];

moja aplikacja ulega awarii:

Thread 1: EXC_BAD_ACCESS (code: 1, address: 0x9450342d)

Trudno mi to zrozumieć, ponieważ wCrumbPath.m plik, ludzie w Apple piszą do „tablicy”, jawnie pobierając blokadę zapisu, a następnie odblokowując ją, ale jeśli uzyskuję blokadę odczytu i próbuję z niej odczytać, ulega ona awarii.

Powód, dla którego próbuję uzyskać dostęp dopoints próbuje zdobyćMKMapPoints, nawróć je naCLLocationCoordinate2D i zapisuj je, abym mógł przerysowaćpolyline na życzenie użytkownika. Ponieważ nie mogę uzyskać dostępu dopoints, Próbuję uratowaćCLLocationCoordinate2D przedmioty z mojegolocationManager które wysyłam do_route w tablicy do przesłania do mojegoAnalizować backend, ale zawsze pojawia się błąd mówiący:

Sending 'CLLocationCoordinate2D' to parameter of incompatible type 'id'

Co nie ułatwia tego. Czy ktoś ma wgląd w to, dlaczego dostaję te błędy?

Delegat Menedżera lokalizacji

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
    if (_userLocation.longitude != manager.location.coordinate.longitude
        && _userLocation.latitude != manager.location.coordinate.latitude) {
        _userLocation = manager.location.coordinate;
    }

    if (_isRecording) {
        if (!_route) {
            NSLog(@"lat: %f, lng: %f", _userLocation.latitude, _userLocation.longitude);
            _route = [[CrumbPath alloc] initWithCenterCoordinate:_userLocation];
            [_mapView addOverlay:_route];

            MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(_userLocation, 2000, 2000);
            [_mapView setRegion:region animated:YES];
        }else {
            MKMapRect updateRect = [_route addCoordinate:_userLocation];

            if (!MKMapRectIsNull(updateRect)) {
                MKZoomScale currentZoomScale = (CGFloat)(_mapView.bounds.size.width / _mapView.visibleMapRect.size.width);
                CGFloat lineWidth = MKRoadWidthAtZoomScale(currentZoomScale);
                updateRect = MKMapRectInset(updateRect, -lineWidth, -lineWidth);
                [_routeView setNeedsDisplayInMapRect:updateRect];
            }
        }
        [_routePoints addObject:_userLocation];

        [_route lockForReading];
        NSLog(@"%d", _route.pointCount);
        NSLog(@"%@", _route.points);
        [_route unlockForReading];
    }
}

Zatrzymaj rejestrowanie logiki

    //stop recording
    NSLog(@"STOP");
    if (_route) {
        NSLog(@"There is a route");
        //Show route options toolbar
        [_route lockForReading];

        NSLog(@"%@", _route);
        NSLog(@"%d", _route.pointCount);
        NSLog(@"%@", _route.points);

        PFObject *routeToSave = [PFObject objectWithClassName:@"Routes"];
        //[routeToSave setObject:_route forKey:@"routePoints"];

        [_route unlockForReading];

        [routeToSave saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
            if (!error) {
                NSLog(@"%c", succeeded);
            }else {
                NSLog(@"%@", error);
            }
        }];
    }

questionAnswers(3)

yourAnswerToTheQuestion