Ios 注释按钮不显示

Ios 注释按钮不显示,ios,mapkit,Ios,Mapkit,我是第一次使用Mapkit,我遇到了一个注释按钮不显示的问题 我使用的是xCode 5和iOS7。我也尝试过xCode 4.6 iOS 6.1,但也没有成功 ViewController.h #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <MapKit/MKAnnotation.h> @interface ViewController : UIViewController <UITe

我是第一次使用Mapkit,我遇到了一个注释按钮不显示的问题

我使用的是xCode 5和iOS7。我也尝试过xCode 4.6 iOS 6.1,但也没有成功

ViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <MapKit/MKAnnotation.h>

@interface ViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UITextField *name;
MKMapView *mapView;
CLLocationManager *locationManager;
NSString *dateString;
NSString *nameString;
//MKPinAnnotationView *pinView;
NSString *pinID;

}

@property(nonatomic, retain) IBOutlet MKMapView *mapView;
@property(nonatomic, retain) UITextField *name;

-(IBAction)addPin;
-(IBAction)addName;

@end
有几点想法:

  • 启动位置服务时,您应该

    • 指定
      self
      的委托;及

    • 视图控制器应实现该调用

    你不能仅仅启动定位服务,然后期望立即获得该位置。您确实需要等待定位服务调用其
    委托
    。事实上,需要预先警告的是,物理设备上的定位服务实际上每次都要进行几次迭代,并且精度越来越高(即
    水平精度
    值越小)

  • addPin
    中,您正在实例化一个新的位置管理器对象。(顺便说一句,您也没有发布之前的实例。)您应该只使用在
    viewDidLoad
    中创建的实例,而不是实例化一个新实例

  • 您的
    注释视图是否被调用?我希望您在Interface Builder中将视图控制器指定为地图的
    委托

  • 看起来您有一些未在
    dealloc
    中发布的类属性(例如位置管理器)。我将通过静态分析器(“产品”菜单上的“分析”)运行此代码,并更正它警告您的任何内容

  • 有几点想法:

  • 启动位置服务时,您应该

    • 指定
      self
      的委托;及

    • 视图控制器应实现该调用

    你不能仅仅启动定位服务,然后期望立即获得该位置。您确实需要等待定位服务调用其
    委托
    。事实上,需要预先警告的是,物理设备上的定位服务实际上每次都要进行几次迭代,并且精度越来越高(即
    水平精度
    值越小)

  • addPin
    中,您正在实例化一个新的位置管理器对象。(顺便说一句,您也没有发布之前的实例。)您应该只使用在
    viewDidLoad
    中创建的实例,而不是实例化一个新实例

  • 您的
    注释视图是否被调用?我希望您在Interface Builder中将视图控制器指定为地图的
    委托

  • 看起来您有一些未在
    dealloc
    中发布的类属性(例如位置管理器)。我将通过静态分析器(“产品”菜单上的“分析”)运行此代码,并更正它警告您的任何内容

  • 当您说“注释按钮”为“否”时,是否意味着您的注释视图(pin)从未显示?你能确认你的
    NSLog
    语句中哪些是你看到的,哪些不是?当你说“注释按钮”时,你的意思是你的注释视图(pin)永远不会出现吗?您能否确认您看到的是和未看到的NSLog语句中的哪些?
    #import "ViewController.h"
    #import "PinDrop.h"
    #import <MapKit/MapKit.h>
    #import <MapKit/MKAnnotation.h>
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    @synthesize mapView;
    @dynamic name;
    
    - (void)viewDidLoad
    {
    name.delegate = self;
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    mapView.showsUserLocation = YES;
    
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    //Get Location
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];
    NSLog(@"%@", [self deviceLocation]);
    
    //Make Pin
    MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = locationManager.location.coordinate.latitude;
    region.center.longitude = locationManager.location.coordinate.longitude;
    region.span.longitudeDelta = 0.005f;
    region.span.longitudeDelta = 0.005f;
    [mapView setRegion:region animated:YES];
    }
    
    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    
    -(IBAction)addPin {
    [self getDateTime];
    //Get Location
    locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];
    NSLog(@"%@", [self deviceLocation]);
    
    //Make Pin
    MKCoordinateRegion region = { { 0.0, 0.0 }, { 0.0, 0.0 } };
    region.center.latitude = locationManager.location.coordinate.latitude;
    region.center.longitude = locationManager.location.coordinate.longitude;
    region.span.longitudeDelta = 0.005f;
    region.span.longitudeDelta = 0.005f;
    [mapView setRegion:region animated:YES];
    
    
    //Pin Info
    PinDrop *ann = [[PinDrop alloc] init];
    nameString = name.text;
    NSLog(@"Name: %@", nameString);
    ann.title = [NSString stringWithFormat:@"Title: %@", nameString];
    ann.subtitle = [NSString stringWithFormat:@"Date: %@", dateString];
    ann.coordinate = region.center;
    [mapView addAnnotation:ann];
    
    //Clear name and stuff
    name.text = @"";
    
    }
    - (NSString *)deviceLocation {
    return [NSString stringWithFormat:@"latitude: %f longitude: %f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude];
    }
    
    -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
    (id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil;
    if(annotation != mapView.userLocation)
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                          initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
    
        pinView.pinColor = MKPinAnnotationColorGreen;
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;
    }
    else {
        [mapView.userLocation setTitle:@"I am here"];
        NSLog(@"Was Else");
    }
    return pinView;
    }
    - (void)dealloc
    {
    [mapView release];
    [super dealloc];
    }
    @end
    
    #import <Foundation/Foundation.h>
    #import <MapKit/MKAnnotation.h>
    
    @interface PinDrop : NSObject <MKAnnotation> {
    
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
    
    }
    
    @property(nonatomic, assign) CLLocationCoordinate2D coordinate;
    @property(nonatomic, copy) NSString *title;
    @property(nonatomic, copy) NSString *subtitle;
    
    @end
    
    #import "PinDrop.h"
    
    @implementation PinDrop
    @synthesize coordinate, title, subtitle;
    
    
    @end