Я пытаюсь использовать делегирование между двумя Viewcontrollers, но, к сожалению, мой делегат не запускается. Надеюсь, кто-то может помочь мне исправить эту проблему. У меня есть ViewContoller, называемый MapBackgroundViewController, и один называется MapsViewController. При изменении параметра SegmentedControl в MapsBackgroundViewController необходимо информировать MapsViewController. (я на самом деле пытаюсь реализовать что-то вроде карт приложения на iPhone с подданным завитком)Делегат не отвечает
Вот часть моего кода:
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 что и никогда не используйте 'strong' /' retain' в свойстве делегата, так как при этом вы будете удерживать цикл сохранения. – Till
@ Будет очень правильным. – graver
ах ок, спасибо. Я вижу проблему. Я действительно ценю твою помощь. Но если я попытаюсь сделать что-то вроде: MapsViewController myMapsViewController = [MapsViewController alloc] init]; Я должен #import мой MapsViewController в MapBackgroundViewController.h (или .m). НО, если я #import его, я получаю сообщение об ошибке: «не удается найти объявление протокола для changeMapTyp» в MapsViewController.h. Кто-нибудь знает, почему это так? – Kito