pencil para pages mac gratis funciona dibujo dibujar conectar como apps apple aplicacion ios annotations mkmapview callout

ios - para - El título del comentario de la anotación no cambia



dibujar en ipad (1)

Los setTitle: y title en userPins.m no se ven bien.

El método setTitle: busca y configura subtítulos en lugar de título. El método title devuelve una cadena constante, por lo que incluso si setTitle: establece el título ivar, la anotación devolverá la misma cadena constante.

Puede corregir esos métodos o simplemente declarar title y subtitle como propiedades de copy y @synthesize them en userPins.m (y liberarlo en dealloc). Entonces no necesitas esos métodos en absoluto (se implementarán automáticamente).

Por cierto, cuando agregue la anotación, asegúrese de establecer el título en algo (incluso en un solo espacio), de lo contrario, la leyenda no se mostrará y didSelectAnnotationView no se didSelectAnnotationView .

Un problema diferente es una pérdida de memoria en viewForAnnotation . Debe agregar una autorelease donde alloc + init annotationView .


Con respecto al código actualizado:

En userPins.m, todavía devuelve cadenas constantes para los subtitle y el title ocultando así los ivars cambiados. Cambiarlo a:

- (id)initWithfbid:(NSInteger*)fbid coordinate:(CLLocationCoordinate2D)coordinate { if ((self = [super init])) { _fbid = fbid; _coordinate = coordinate; //init the ivars here... _title = @"Something"; _subtitle = @"Anything"; } return self; } /* comment these methods out - (NSString *)subtitle{ return @"Anything"; } - (NSString *)title{ return @"Something"; } */


Un nuevo problema no relacionado es que fbid probablemente debería ser NSNumber * lugar de NSInteger * . NSInteger no es un objeto y un NSNumber es lo que el analizador JSON le está dando.

He buscado pero no he encontrado ninguna solución a mi problema. Quiero cambiar el pin ya agregado. Y aquí está mi código. Obtengo "Code Here" en la consola.

Tengo en .h

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView;

myViewController.m

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView { userPins *myAnnot = (userPins *)annotationView.annotation; [myAnnot setTitle:@"o21"]; NSLog(@"Code here!"); } - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { static NSString *identifier = @"userPins"; if ([annotation isKindOfClass:[userPins class]]) { MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; if (annotationView == nil) { annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; } else { annotationView.annotation = annotation; } annotationView.image = [UIImage imageNamed:@"mapMarker-blue.png"]; annotationView.calloutOffset = CGPointMake(0,0); UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; annotationView.rightCalloutAccessoryView = detailButton; annotationView.enabled = YES; annotationView.canShowCallout = YES; return annotationView; } return nil; }

En userPins.mi have. Pero no hice esto con setTitle también.

- (void)setTitle:(NSString *)title { if (_subtitle != subtitle) { [_subtitle release]; _subtitle = [subtitle retain]; } } - (NSString *)title{ return @"okan"; }

Editar: @AnnaKarenina

Lo he intentado todo. Pero setTitle no se está ejecutando. ¡Me estoy volviendo loco! Este es todo mi código. Y no estoy recibiendo errores.

userpins.m

#import "userPins.h" @implementation userPins @synthesize fbid = _fbid; @synthesize coordinate = _coordinate; @synthesize title = _title; @synthesize subtitle = _subtitle; - (id)initWithfbid:(NSInteger*)fbid coordinate:(CLLocationCoordinate2D)coordinate { if ((self = [super init])) { _fbid = fbid; _coordinate = coordinate; } return self; } - (NSString *)subtitle{ return @"Anything"; } - (NSString *)title{ return @"Something"; } - (void)dealloc { [_title release]; [_subtitle release]; [super dealloc]; } @end

userPins.h

#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface userPins : NSObject <MKAnnotation> { NSInteger *_fbid; CLLocationCoordinate2D _coordinate; NSString *_title; NSString *_subtitle; } @property (nonatomic, readonly) NSInteger *fbid; @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString *title; @property (nonatomic, copy) NSString *subtitle; - (id)initWithfbid:(NSInteger*)fbid coordinate:(CLLocationCoordinate2D)coordinate; @end

viewController.m

#import "lociseViewController.h" #import "ASIHTTPRequest.h" #import "SBJSON.h" #import "userPins.h" @implementation lociseViewController @synthesize mapView = _mapView; - (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. } #pragma mark - View lifecycle // Add new method above refreshTapped - (void)plotPositions:(NSString *)responseString { for (id<MKAnnotation> annotation in _mapView.annotations) { [_mapView removeAnnotation:annotation]; } NSDictionary * root = [responseString JSONValue]; NSArray *data = [root objectForKey:@"data"]; for (NSArray * row in data) { NSInteger * fbid = (NSInteger *)[row objectAtIndex:0]; NSNumber * latitude = [row objectAtIndex:1]; NSNumber * longitude = [row objectAtIndex:2]; CLLocationCoordinate2D coordinate; coordinate.latitude = latitude.doubleValue; coordinate.longitude = longitude.doubleValue; userPins *annotation = [[[userPins alloc] initWithfbid:fbid coordinate:coordinate] autorelease]; [_mapView addAnnotation:annotation]; } } // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { // 1 MKCoordinateRegion mapRegion = [_mapView region]; CLLocationCoordinate2D centerLocation = mapRegion.center; // 2 NSString *jsonFile = [[NSBundle mainBundle] pathForResource:@"command" ofType:@"json"]; NSString *formatString = [NSString stringWithContentsOfFile:jsonFile encoding:NSUTF8StringEncoding error:nil]; NSString *json = [NSString stringWithFormat:formatString, centerLocation.latitude, centerLocation.longitude, 0.5*METERS_PER_MILE]; NSURL *url = [NSURL URLWithString:@"http://localhost/users.json"]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; request.requestMethod = @"POST"; //request.defaultResponseEncoding = NSISOLatin1StringEncoding; //[request addRequestHeader:@"Content-Encoding" value:@"windows-1255"]; [request addRequestHeader:@"Content-Type" value:@"application/json"]; [request appendPostData:[json dataUsingEncoding:NSUTF8StringEncoding]]; [request setDefaultResponseEncoding:NSUTF8StringEncoding]; // 5 [request setDelegate:self]; [request setCompletionBlock:^{ NSString *responseString = [request responseString]; NSLog(@"Response: %@", responseString); [self plotPositions:responseString]; }]; [request setFailedBlock:^{ NSError *error = [request error]; NSLog(@"Error: %@", error.localizedDescription); }]; // 6 [request startAsynchronous]; //CLLocationManager *locationManager; //locationManager.delegate = self; [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { // 1 CLLocationCoordinate2D zoomLocation; zoomLocation.latitude = 35.333070; zoomLocation.longitude = 33.302875; // 2 MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 50*METERS_PER_MILE, 3*METERS_PER_MILE); // 3 MKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion]; // 4 [_mapView setRegion:adjustedRegion animated:YES]; } - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView { userPins *myAnnot = (userPins *)annotationView.annotation; [myAnnot setTitle:@"o21"]; NSLog(@"Title: %@", annotationView.annotation.subtitle); } - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { static NSString *identifier = @"userPins"; if ([annotation isKindOfClass:[userPins class]]) { MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; if (annotationView == nil) { annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; } else { annotationView.annotation = annotation; } annotationView.image = [UIImage imageNamed:@"mapMarker-blue.png"]; annotationView.calloutOffset = CGPointMake(0,0); UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; annotationView.rightCalloutAccessoryView = detailButton; annotationView.enabled = YES; annotationView.canShowCallout = YES; return annotationView; } return nil; } - (void)viewDidUnload { [self setMapView:nil]; [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void)dealloc { [_mapView release]; [super dealloc]; } @end

viewController.h

#import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #define METERS_PER_MILE 1609.344 @interface lociseViewController : UIViewController <MKMapViewDelegate> { MKMapView *_mapView; } @property (nonatomic, retain) IBOutlet MKMapView *mapView; - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)annotationView; @end