将所选位置从一个地图传递到另一个地图视图iOS 7

时间:2014-02-23 11:31:32

标签: ios ios7 mkannotation

我有一个存储属性的单例类 - 选定位置(MKPointAnnotation)。该位置由用户从第一个地图视图设置。但是,我不明白为什么这个属性为null?这里的代码。

Link to the project

选定的代码片段。

我存储有关所选地点信息的类:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface GeoChatInformationAboutTheSelectedPlace : NSObject <MKMapViewDelegate>
//create object that mimic the Place with the required information
@property (nonatomic)         NSUInteger numberOfThePostsForTheSelectedLocation;
@property (nonatomic, strong) MKPointAnnotation *annotation;
+(GeoChatInformationAboutTheSelectedPlace *)returnInstance;
@end


//implementation of the above class
#import "GeoChatInformationAboutTheSelectedPlace.h"

@implementation GeoChatInformationAboutTheSelectedPlace
static GeoChatInformationAboutTheSelectedPlace *info=NULL;
+(GeoChatInformationAboutTheSelectedPlace *)returnInstance{
    if (!info){
        info = [[GeoChatInformationAboutTheSelectedPlace alloc] init];
        info.annotation=[[MKPointAnnotation alloc] init];
    }
    return info;
}
@end

我如何添加所选位置(基于Anna的评论):

.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "GeoChatInformationAboutTheSelectedPlace.h"
@interface GeoChatMapViewController : UIViewController <MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *map;
@property (strong,nonatomic) NSMutableArray *matchingItems;
@property (strong, nonatomic) IBOutlet UITextField *textSearch;
@property (strong, nonatomic) GeoChatInformationAboutTheSelectedPlace *info;
@property (weak, nonatomic) IBOutlet UIStepper *stepper;
- (IBAction)increaseDecreaseRadiousOfTheSearch:(id)sender;
@end

/*------------part of the implementation class--------*/
//selecting the location and displaying its coordinates
-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Would you like to add this location?"
                                                    message:[view.annotation title]
                                                   delegate:self
                                          cancelButtonTitle:@"Yep!"
                                          otherButtonTitles:@"No :(", nil];
    [alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex==0) {
        MKAnnotationView *selectedAnnotation=[_map.selectedAnnotations objectAtIndex:0];

        if ([selectedAnnotation isKindOfClass:[MKPointAnnotation class]]) {
            MKPointAnnotation *pa = (MKPointAnnotation *)selectedAnnotation;
            //[_info.arrayOfTheSelectedPlaces addObject:pa];
            _info.annotation=pa;
        }
    }
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _info=[GeoChatInformationAboutTheSelectedPlace returnInstance];
    _map.showsUserLocation=YES;
}

如何在第二张地图上显示所选注释:

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "GeoChatInformationAboutTheSelectedPlace.h"
@interface GeoChatProjectSavedLocationToDisplayOnMapViewController : UIViewController <MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *map;
@property (strong, nonatomic) GeoChatInformationAboutTheSelectedPlace *info;
@property (strong, nonatomic) MKPointAnnotation *bb;
@end

/*----------------------------.m---------------------------------------*/
#import "GeoChatProjectSavedLocationToDisplayOnMapViewController.h"

@interface GeoChatProjectSavedLocationToDisplayOnMapViewController ()
@end

@implementation GeoChatProjectSavedLocationToDisplayOnMapViewController
-(void)setBb:(MKPointAnnotation *)bb{
    _bb=bb;
}
-(void)setMap:(MKMapView *)map {
    _map=map;
    _map.delegate=self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    _map.showsUserLocation=YES;
    _info=[GeoChatInformationAboutTheSelectedPlace returnInstance];

    //displays nothing
    NSLog(@"%@",[_info.annotation title]);
    //however, when I write 
    //NSLog(@"%@",_info.annotation);
    //It displays me that the object is not nill
    //adds nothing to the map
    [_map addAnnotation:_info.annotation];
}
@end

0 个答案:

没有答案