Делегат не отвечает

Я пытаюсь использовать делегирование между двумя Viewcontrollers, но, к сожалению, мой делегат не уволен. Я надеюсь, что кто-нибудь может помочь мне решить проблему. У меня есть ViewContoller с именем MapBackgroundViewController и один с именем MapsViewController. MapsViewController должен быть проинформирован, если SegmentedControl MapsBackgroundViewController изменяется. (На самом деле я пытаюсь реализовать что-то вроде приложения карт на iPhone с патрилом curl)

Вот часть моего кода:

MapBackgroundViewController.h

@protocol ChangeMapTyp <NSObject>
@required
- (void)segmentedControllChangedMapType:(MKMapType) type ;
@end


@interface MapBackgroundViewController : UIViewController{
IBOutlet UISegmentedControl *segmentedControl;
MKMapType mapType;
id < ChangeMapTyp> delegate;

}


@property IBOutlet UISegmentedControl *segmentedControl;

@property MKMapType mapType;

@property(strong)id delegate;

- (IBAction)segmentedControllChanged:(id)sender;

MapBackgroundViewController.m

@interface MapBackgroundViewController ()

@end

@implementation MapBackgroundViewController
@synthesize segmentedControl, mapType, delegate;


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

[self setDelegate:self];

NSLog(@"%@",self.delegate);

}


- (IBAction)segmentedControllChanged:(id)sender {

if (segmentedControl.selectedSegmentIndex == 0) {
    mapType = MKMapTypeStandard;
}else if (segmentedControl.selectedSegmentIndex == 1) {
    mapType = MKMapTypeSatellite;
} else if (segmentedControl.selectedSegmentIndex == 2) {
 //   [self.delegate setMapType:MKMapTypeHybrid];
    mapType = MKMapTypeHybrid;
}


//Is anyone listening

NSLog(@"%@",self.delegate);

if([self.delegate respondsToSelector:@selector(segmentedControllChangedMapType:)])
{
    //send the delegate function with the amount entered by the user
    [self.delegate segmentedControllChangedMapType:mapType];
}

[self dismissModalViewControllerAnimated:YES];

}

MapsViewController.h

#import "MapBackgroundViewController.h"

@class MapBackgroundViewController;

@interface MapsViewController : UIViewController<MKMapViewDelegate,
UISearchBarDelegate,  ChangeMapTyp >{
 IBOutlet MKMapView *map;
}


@property (nonatomic, retain) IBOutlet MKMapView *map;


@end

MapsViewController.m (приведенный ниже метод по какой-то причине никогда не вызывается)

 - (void)segmentedControllChangedMapType: (MKMapType) type{
    map.mapType = type;
 }

1 ответ

Решение

В MapBackgroundViewController вы установили delegate собственность на selfТаким образом, делегат self - (MapBackgroundViewController) поэтому при выполнении проверки if([self.delegate respondsToSelector:@selector(segmentedControllChangedMapType:)]) это возвращается NO, так как self.delegate (который self, который MapBackgroundViewController), не реализует этот метод. Если вы хотите, чтобы ваш MapsViewController быть делегатом, в вашем MapBackgroundViewController у вас должен быть экземпляр MapsViewController (называется myMapsViewController например), а затем установите self.delegate = myMapsViewController,

Другие вопросы по тегам