두 개의 ViewController간에 위임을 사용하려고하지만 불행히도 내 대리자가 해고되지 않습니다. 누군가가 내가 문제를 해결하도록 도울 수 있기를 바랍니다. MapViewViewController라는 ViewContoller와 MapsViewController라는 ViewContoller가 있습니다. MapsBackgroundViewController의 SegmentedControl이 변경되면 MapsViewController에 알려야합니다.대리자가 응답하지 않습니다.
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];
}
:
여기
내 코드의 일부입니다 (사실 patrial 컬 아이폰의지도 응용 프로그램 같은 것을 구현하려고)
MapsViewController.h
,515,MapsViewController.m는 self
에 delegate
속성을 설정 한 MapBackgroundViewController
에서 (몇 가지 이유가 호출되지 도착을 위해 아래의 방법)
- (void)segmentedControllChangedMapType: (MKMapType) type{
map.mapType = type;
}
+1 그렇게 할 때 보유주기를 렌더링하므로 위임 속성에서'strong' /'retain'을 사용하지 마십시오. – Till
@Till은 매우 정확합니다. – graver
아, 감사합니다. 나는 그 문제를 안다. 도와 주셔서 정말 고맙습니다. 하지만 다음과 같이하려고하면 MapsViewController myMapsViewController = [MapsViewController alloc] init]; MapBackgroundViewController.h (또는 .m)에서 # Maps My MapsViewController를 사용해야합니다. 하지만 # import하면 MapsViewController.h에서 "changeMapTyp에 대한 프로토콜 선언을 찾을 수 없습니다."라는 오류 메시지가 나타납니다. 그 이유를 아는 사람이 있습니까? – Kito