/ / mkmap दुर्घटनाग्रस्त होने पर मानचित्र पर पिन करने के लिए उपयोगकर्ता स्थान से दूरी प्राप्त करने की कोशिश कर रहा है - iphone, दूरी, mkannotation, mkpinannotationview, उपयोगकर्ता सूची

मैप पर पिन करने के लिए यूजर लोकेशन से दूरी पाने की कोशिश करने पर mkmap क्रैश हो जाना - iphone, दूरी, mkannotation, mkpinannotationview, यूजरलोकेशन

जब भी मैं अपने पिन पर क्लिक करता हूँ किसी कारण से ऐप क्रैश हो जाता है। मेरे कोड में कोई त्रुटि या चेतावनी नहीं है। यह केवल तब होता है जब मैं उपयोगकर्ता से आवंटन की दूरी को पिन करने की कोशिश करता हूं। मेरी गलती ढूंढे?

@implementation FirstViewController
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
mapView.showsUserLocation = YES;

[super viewDidLoad];
}
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation   {

[self showPin];
[self updateLocation];
}
-(IBAction) updateLocation{
mapView.showsUserLocation = YES;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn"t have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc. that aren"t in use.
}


- (void)viewDidUnload
{
[super viewDidUnload];

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


-(IBAction)setMap:(id)sender{
switch(((UISegmentedControl *)sender).selectedSegmentIndex){
case 0:
{
mapView.mapType = MKMapTypeStandard;
break;
}
case 1:
{
mapView.mapType = MKMapTypeSatellite;
break;
}
case 2:
{
mapView.mapType = MKMapTypeHybrid;
break;
}

}}
- (void)dealloc
{
[super dealloc];
}
- (MKAnnotationView *)mapView:(MKMapView *)mv viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
if (!pinView) {
pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"] autorelease];
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;


UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = rightButton;
} else {
pinView.annotation = annotation;
}
if (annotation == mapView.userLocation){
return nil; //default to blue dot
}
return pinView;
}
-(IBAction) showPin{
//MOST CODE WILL BE INSERTED HERE!
//instructions

CLLocation *usersLocation = [[CLLocation alloc]initWithLatitude:mapView.userLocation.coordinate.latitude longitude:mapView.userLocation.coordinate.longitude];
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.2;
span.longitudeDelta=0.2;
//ignore above
//always declare location as companyCity
//if more than one in one city then add a number i.e. companyCity2
//chili in mobile alabama
CLLocationCoordinate2D chiliAuburn = mapView.userLocation.coordinate;

chiliAuburn.latitude = 32.606434 ;
chiliAuburn.longitude = -85.484025;
region.span=span;
region.center=chiliAuburn;
CLLocation *chiliAuburnLocation = [[CLLocation alloc] initWithLatitude:chiliAuburn.latitude longitude:chiliAuburn.longitude];
if(chiliAuburnAlabama != nil) {
[mapView removeAnnotation:chiliAuburnAlabama];
[chiliAuburnAlabama release];
chiliAuburnAlabama = nil;
}

chiliAuburnAlabama = [[AddressAnnotation alloc] initWithCoordinate:chiliAuburn];
[chiliAuburnAlabama setTitle:@"Chili Yogurt Café"];
double distanceMiles = ([usersLocation distanceFromLocation:chiliAuburnLocation]/1609.334);
[chiliAuburnAlabama setSubTitle:[NSString stringWithFormat:@"%.2fm", distanceMiles]];
//[chiliAuburnAlabama setSubTitle:@"TEST"];
[mapView addAnnotation:chiliAuburnAlabama];
[chiliAuburnAlabama release];
//tutti frutti homewood alabama
CLLocationCoordinate2D tuttifruttiHomewood = mapView.userLocation.coordinate;

tuttifruttiHomewood.latitude = 33.479775 ;
tuttifruttiHomewood.longitude = -86.790977;
region.span=span;
region.center=tuttifruttiHomewood;

if(tuttifruttiHomewoodAlabama != nil) {
[mapView removeAnnotation:tuttifruttiHomewoodAlabama];
[tuttifruttiHomewoodAlabama release];
tuttifruttiHomewoodAlabama = nil;
}

tuttifruttiHomewoodAlabama = [[AddressAnnotation alloc] initWithCoordinate:tuttifruttiHomewood];
[tuttifruttiHomewoodAlabama setTitle:@"Tutti Frutti"];
[tuttifruttiHomewoodAlabama setSubTitle:@"YOUR RATING HERE"];
[mapView addAnnotation:tuttifruttiHomewoodAlabama];


//ignore below
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];

}
- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views {
for(MKAnnotationView *annotationView in views) {
if(annotationView.annotation == mv.userLocation) {
MKCoordinateRegion region;
MKCoordinateSpan span;

span.latitudeDelta=0.1;
span.longitudeDelta=0.1;

CLLocationCoordinate2D location=mv.userLocation.coordinate;

region.span=span;
region.center=location;

[mv setRegion:region animated:TRUE];
[mv regionThatFits:region];
}

}
}



@end

जीएनयू जीडीबी 6.3।50-20050815 (Apple संस्करण gdb-1518) (सत फरवरी 12 02:52:12 UTC 2011) कॉपीराइट 2004 फ्री सॉफ्टवेयर फाउंडेशन, इंक। GDB जीएनयू जनरल पब्लिक लाइसेंस द्वारा कवर किया गया मुफ्त सॉफ्टवेयर है, और आप हैं कुछ शर्तों के तहत इसे बदलने और / या इसकी प्रतियां वितरित करने के लिए आपका स्वागत है। शर्तों को देखने के लिए "शो कॉपी" टाइप करें। जीडीबी के लिए कोई भी वारंटी नहीं है। विवरण के लिए "शो वारंटी" टाइप करें। इस GDB को "x86_64-apple-darwin" के रूप में कॉन्फ़िगर किया गया था। 23386 को संसाधित करने के लिए उपलब्ध है। 2011-06-02 00: 39: 46.146 योगर्टस्टोर लोटेक्टर [23386: 207] 32.606434, -85.484025 2011-06-02 00: 39: 46.148 योगर्टस्टोर लोटेक्टर [23386: 207] 33.479775, -86.790977 2011-06-02 00: 39: 53.121 YogurtStoreLocator [23386: 207] - [NSCFNumber stringByStandardizingWhitespace]: गैर-मान्यता प्राप्त चयनकर्ता को 0x8787b2d0 इंस्टेंस पर भेजा गया 2011-06-02 00: 39: 53.123 योगर्टस्टोलेक्टर [23386: 207] * बिना किसी अपवाद के "NSInvalidArgumentException" अपवाद के कारण समाप्त होने वाला ऐप, कारण: "- [NSCFNumber stringByStandardizingWhitespace]: अपरिचित चयनकर्ता को उदाहरण के लिए भेजा गया Xx587b2d0" * पहली फेंक में कॉल स्टैक: ( 0 CoreFoundation 0x00fca5a9 अपवादप्राप्य + 185 1 लिबोजजैक ए।dylib 0x0111e313 objc_exception_throw + 44 2 CoreFoundation 0x00fcc0bb - [NSObject (NSObject) doNotRecognizeSelector:] + 187 3 कोरफाउंडेशन 0x00f3b966 __अग्रेषित करना + ९ ६६ 4 CoreFoundation0x00f3b522 _CF_forwarding_prep_0 + 50 5 UIKit 0x0034c340 - [UICalloutView setSubtitle: एनिमेटेड:] [88 6 UIKit 0x0034c010 - [UICalloutView setSubtitle:] + 49 7 MapKit 0x000bb0ac - [MKAnnotationContainerView _showBubbleForAnnotationView: उछाल: स्क्रॉलटाइट: उपयोगकर्ता आरंभ: बचना:] + 537 8 MapKit 0x000bc3ed - [MKAnnotationContainerView _setSelectedAnnotationView: उछाल: दबाया गया: स्क्रॉलटाइट: उपयोक्ता: आरंभ: बचना] [653] 9 MapKit 0x000b54bc - [MKAnnotationContainerView _setSelectedAnnotationView: उछाल: दबाया गया: स्क्रॉल करें: उपयोक्ता: आरंभ: + 144 10 MapKit 0x0008cab3 - [MKMapView हैंडल:] + 459 11 UIKit 0x004ad4f2 - [UIGestureRecognizer _updateGestureWithEvent:] + 730 12 UIKit 0x004a94fe - [UIGestureRecognizer _delayedUpdateGesture] + 47 13 UIKit 0x004afafc _UIGestureRecognizerUpdateObserver + 584 14 कोरफाउंडेशन 0x00fab89b CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 27 15 CoreFoundation0x00f406e7 __CFRunLoopDoObservers + 295 16 कोरफाउंडेशन 0x00f091d7 __CFRunLoopRun + 1575 17 कोरफाउंडेशन 0x00f08840 CFRunLoopRunSpecific + 208 18 CoreFoundation 0x00f08761 CFRunLoopRunInMode + 97 19 ग्राफिक्स सर्विसेज़ 0x01f071c4 GSEventRunModal + 217 20 ग्राफ़िक्स सर्विसेज़ 0x01f07289 GSEventRun + 115 21 UIKit 0x0022ac93 UIApplicationMain + 1160 22 योगर्टस्टोरीलॉकर 0x00002099 मुख्य + 121 23 योगर्टस्टोर लोसकटर 0x00002015 शुरू + 53 ) "NSException" का एक उदाहरण फेंकने के बाद बुलाया समाप्त साझा-नियम सभी पर लोड-लोड-नियम लागू होते हैं वर्तमान भाषा: ऑटो; वर्तमान में उद्देश्य-सी (Gdb)

उत्तर:

जवाब के लिए 2 № 1

बस सेटिंग कर रहा हूं showsUserLocation सेवा मेरे YES isn "t पर्याप्त। मैप व्यू को उस डेटा को प्राप्त करने की आवश्यकता है। यह एक एसिंक्रोनस प्रक्रिया है और डेटा को थोड़ी देर बाद ही अपडेट किया जाएगा। प्रतिनिधि को इस अपडेट के माध्यम से सूचित किया जाता है। mapView:didUpdateUseLocation: तरीका। आपको उस तरीके को लागू करना चाहिए और कॉल करना चाहिए showPin केवल आपके बाद "उपयोगकर्ता स्थान।