gpt4 book ai didi

ios - 注释标注标题不变

转载 作者:行者123 更新时间:2023-11-29 11:20:11 26 4
gpt4 key购买 nike

我进行了搜索,但没有找到解决我的问题的方法。我想更改已添加的引脚。这是我的代码。我在控制台中收到“Code Here”。

我有.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;

}

在 userPins.m 我有。但是我也没有用 setTitle 这样做。

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

- (NSString *)title{
return @"okan";
}

编辑:@AnnaKarenina

我都试过了。但是 setTitle 没有运行。我要疯了!这是我所有的代码。而且我没有收到错误。

用户密码.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

用户密码.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

最佳答案

userPins.m 中的 setTitle:title 方法看起来不正确。

setTitle: 方法查看并设置副标题而不是标题。 title 方法返回一个常量字符串,因此即使 setTitle: 设置了标题 ivar,注解也会返回相同的常量字符串。

您可以修复这些方法,或者只将 titlesubtitle 声明为 copy 属性,并将它们声明为 @synthesize userPins.m(并在 dealloc 中释放)。那么你根本不需要那些方法(它们会自动实现)。

顺便说一句,当你添加注释时,一定要将标题设置为某个东西(即使是一个空格),否则标注将不会显示并且 didSelectAnnotationView 将不会被调用。

另一个问题是 viewForAnnotation 中的内存泄漏。您应该在 alloc+init annotationView 的位置添加一个 autorelease


关于更新后的代码:

在 userPins.m 中,它仍然为 subtitletitle 返回常量字符串,从而隐藏更改的 ivar。将其更改为:

- (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";
}
*/


一个新的、不相关的问题是 fbid 可能应该是 NSNumber * 而不是 NSInteger *NSInteger 不是一个对象,NSNumber 是 JSON 解析器最有可能给你的。

关于ios - 注释标注标题不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com