Ios 为什么我的委托为空?

Ios 为什么我的委托为空?,ios,objective-c,protocols,Ios,Objective C,Protocols,我正在使用XCode 4.5.1构建一个iOS 6应用程序 我正在尝试使用一个协议,我的控制器可以使用它来检索图像。然而,尽管我这样称呼我的代表,但从未有人这样称呼它: UIImage *image = [self.delegate mapViewController:self imageForAnnotation:aView.annotation]; 当我调试这一行时,我可以看到self.delegate为空,尽管我将TableViewController关联为其委托 MapViewCont

我正在使用XCode 4.5.1构建一个iOS 6应用程序

我正在尝试使用一个协议,我的控制器可以使用它来检索图像。然而,尽管我这样称呼我的代表,但从未有人这样称呼它:

UIImage *image = [self.delegate mapViewController:self imageForAnnotation:aView.annotation];
当我调试这一行时,我可以看到
self.delegate
为空,尽管我将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
我使用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
@interface-RecentPhotosTableViewController()
-(PhotoViewController*)splitViewPhotoViewController;
@结束
@最新PhotosTableViewController的实现
-(UIImage*)mapViewController:(mapViewController*)发送方imageForAnnotation:(id)annotation
{
FlickphotoAnnotation*fpa=(FlickphotoAnnotation*)注释;
NSURL*url=[FlickrFetcher urlForPhoto:fpa.photo格式:FlickpPhotoFormatSquare];
NSData*data=[NSData dataWithContentsOfURL:url];
返回数据?[UIImage imageWithData:data]:无;
}
@结束

您的任何代码都不显示您将任何内容设置为其他内容的委托。您声明了一些属性并采用了一些协议,但没有一个协议真正将
self
delegate
属性设置为值。

当然,我们没有您所有的源代码,但Etan和CodaFi似乎是正确的:实例化
RecentPhotosTableViewController
对象并将该对象设置为MapViewController对象的委托的代码行在哪里

我想我们期待看到这样的情况:

@implementation RecentPhotosTableViewController

- (void) someMethod {
    self.mapViewController = [[MapViewController alloc] init];
    self.mapViewController.delegate = self;
    ...
}
您已经在MapViewController类中声明了一个委托属性,但是您必须在实例化该委托属性后将其实际设置为某个对象,以使委托调用工作


(如果这太简单了,很抱歉,但看起来您在概念上遇到了相当基本的困难;如果我没有抓住要点,很抱歉!)

您在哪里设置代理?我看不到代理分配。您确实没有设置代理。顺便说一句,您可以离开
@synthesis delegate=\u delegate从Xcode 4.4开始输出。编译器会处理它的,谢谢你这么快的响应。
@implementation RecentPhotosTableViewController

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