2012-11-16 5 views
1

내가 MKMap 놀아되고 일부 사용자 지정 위임가 여기에 작동하지 않습니다 그리고 난 정말 이유를 모르는와 항상 false respondsToSelector :IOS - 사용자 정의 위임

LocationViewController :/

여기 내 코드입니다. 시간

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 

@protocol LocationViewDelegate <NSObject> 

@required 
- (void)didReceiveLocation:(CLLocation *)location; 

@end 

@interface LocationViewController : UIViewController <CLLocationManagerDelegate> 

@property (strong, nonatomic) IBOutlet UILabel *locationLabel; 
@property (nonatomic, strong) id<LocationViewDelegate> delegate; 

- (IBAction)sendLocation:(id)sender; 

@end 

LocationViewController.m

,839,

는 MapViewController.h

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 
#import "LocationViewController.h" 

@interface MapViewController : UIViewController <LocationViewDelegate> 

@end 

MapViewController.m 난 항상 "아니"라는 메시지를 받고 있어요

[...] 
- (void)didReceiveLocation:(CLLocation *)location { 
    _mapView.centerCoordinate = location.coordinate; 
} 
[...] 

은 NO 그 respondsToSelector 수익률을 의미한다. 며칠 전에 나는 똑같은 예를 보여 주었고 모든 것이 잘되었다.

누군가 여기서 문제를 볼 수 있습니까?

+1

1. 확인하기 위해 먼저 MapViewController를 LocationViewController의 위임자로 설정하고 있습니까? 즉, MapViewController.m에서 : self.locationViewController.delegate = self; 2. 대리자 속성에 _delegate로 액세스하고 있습니다. LocationViewController.m에서 합성하고 있는지 확인하십시오. 제쳐두고, 제쳐두고 MapViewController가 LocationViewController 인스턴스를 소유하고 있다고 가정합니다. 따라서 Circular 참조를 피하기 위해 LocationViewController의 delegate 속성을 'weak'로 설정하는 것이 좋습니다. @property (비 원자력, 약함) id 대리자; – thomh

+0

실제로 마지막 연습에서 self.locationViewController.delegate = self와 같은 smgt를 수행 할 필요가 없었습니다. 이것 없이는 일하고있었습니다. 하지만이 예제에서이 코드 줄을 추가하려고 시도했지만 여전히 작동하지 않습니다. 그리고 네, 모두 잘 합성되고 있습니다 – Yaman

+0

그래, 어디서 문제가 발생했는지 알았어. locationViewController.delegate에 대해 당신이 옳았습니다. 내 두 컨트롤러가 TabBarController에서 2 개의 다른 컨트롤러를 사용하기 때문에 AppController.delegate = mapController를 AppDelegate에 추가해야했습니다. – Yaman

답변

3

이 MapViewController.m의 LocationViewController 즉 대리자로 MapViewController 설정 : 그래서 그것은을 설정하는 것이 좋습니다 경우 여담으로 그냥

self.locationViewController.delegate = self; 

, 나는 당신의 MapViewController가 LocationViewController 인스턴스를 소유 추정하고 있습니다 LocationViewController의 속성을 순환 참조를 피하기 위해 'weak'로 위임합니다. @property (비 원자력, 약한) id delegate;