2013-03-09 162 views
3

我正在使用XCode 4.5.1構建iOS 6應用程序爲什麼我的委託爲空?

我試圖使用我的控制器可用於檢索圖像的協議。然而,我的委託從來不叫我,儘管調用它是這樣的:

UIImage *image = [self.delegate mapViewController:self imageForAnnotation:aView.annotation]; 

當調試這條線,我可以看到self.delegate爲null,儘管我是其委託關聯一個TableViewController。

MapViewController.h:

@class MapViewController; 
@protocol MapViewControllerDelegate <NSObject> 
    - (UIImage *)mapViewController:(MapViewController *)sender imageForAnnotation:(id <MKAnnotation>)annotation; 
@end 

@interface MapViewController : UIViewController 
@property (nonatomic, weak) id <MapViewControllerDelegate> delegate; 
@end 

MapViewController.m:

@implementation MapViewController 
@synthesize delegate = _delegate; 

我使用的是TableViewController爲MapViewControllerDelegate

@interface RecentPhotosTableViewController() <MapViewControllerDelegate> 

- (PhotoViewController *) splitViewPhotoViewController; 
@end 

@implementation RecentPhotosTableViewController 
- (UIImage *)mapViewController:(MapViewController *)sender imageForAnnotation:(id <MKAnnotation>)annotation 
{ 
    FlickrPhotoAnnotation *fpa = (FlickrPhotoAnnotation *)annotation; 
    NSURL *url = [FlickrFetcher urlForPhoto:fpa.photo format:FlickrPhotoFormatSquare]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    return data ? [UIImage imageWithData:data] : nil; 
} 

@end 
+2

你在哪裏設置委託? – Etan 2013-03-09 22:52:44

+1

我看不到委託任務。 – CodaFi 2013-03-09 22:52:45

+3

你確實不設置委託。順便說一句,你可以離開'@synthesize委託= _delegate;'自Xcode 4.4以來。編譯器會處理它 – s1m0n 2013-03-09 22:57:41

回答

5

你的代碼中沒有顯示您設置什麼作爲其他任務的代表。您聲明瞭一些屬性,並且您採用了一些協議,但實際上沒有一個將delegate屬性self設置爲某個值。

+0

感謝這麼快速的迴應馬特。 – seedhead 2013-03-09 23:33:45

0

當然,我們沒有所有的源代碼,但是Etan和CodaFi看起來是正確的:你實例化你的RecentPhotosTableViewController對象並將該對象設置爲你的MapViewController對象委託的代碼行在哪裏?

我認爲,我們期待看到類似:

@implementation RecentPhotosTableViewController 

- (void) someMethod { 
    self.mapViewController = [[MapViewController alloc] init]; 
    self.mapViewController.delegate = self; 
    ... 
} 

你已經宣佈在的MapViewController類的委託財產,但你實際設置該委託財產的一些對象實例化它後使委託呼叫工作。

(很抱歉,如果這是簡單的,但似乎你有一個非常基本的概念上的困難;道歉,如果我錯過了點!)

相關問題