3

XCode4.5.1を使用してiOS6アプリを構築しています

コントローラが画像を取得するために使用できるプロトコルを使用しようとしています。ただし、次のように呼び出しているにもかかわらず、代理人が呼び出されることはありません。

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

この行をデバッグするself.delegateと、TableViewControllerをそのデリゲートに関連付けているにもかかわらず、nullであることがわかります。

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
4

2 に答える 2

5

あなたのコードのどれもあなたが何かを他のものの委任者として設定することを示していません。いくつかのプロパティを宣言し、いくつかのプロトコルを採用しますが、実際にはのdelegateプロパティをself値に設定するものはありません。

于 2013-03-09T22:53:04.850 に答える
0

もちろん、すべてのソース コードがあるわけではありませんが、Etan と CodaFi は正しいようです。オブジェクトをインスタンス化し、RecentPhotosTableViewControllerそのオブジェクトを MapViewController オブジェクトのデリゲートとして設定するコード行はどこにあるのでしょうか?

私たちは次のようなものを見ることを期待していると思います:

@implementation RecentPhotosTableViewController

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

MapViewController クラスでデリゲート プロパティを宣言しましたが、デリゲート呼び出しを機能させるには、オブジェクトをインスタンス化した後で、実際にそのデリゲート プロパティを何らかのオブジェクトに設定する必要があります。

(単純化して申し訳ありませんが、かなり基本的な概念の問題を抱えているようです。要点を見逃していたら申し訳ありません!)

于 2013-03-09T23:02:31.213 に答える