我正在使用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
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
答案 0 :(得分:5)
您的所有代码都没有显示您将任何内容设置为其他内容的代理。您声明了一些属性并采用了一些协议,但这些协议实际上都没有将delegate
self
属性设置为值。
答案 1 :(得分:0)
我们当然没有你所有的源代码,但是Etan和CodaFi似乎是正确的:代码行在哪里你实例化你的RecentPhotosTableViewController
对象并将该对象设置为你的MapViewController对象委派?
我想我们期待看到类似的东西:
@implementation RecentPhotosTableViewController
- (void) someMethod {
self.mapViewController = [[MapViewController alloc] init];
self.mapViewController.delegate = self;
...
}
您已在MapViewController类中声明了一个委托属性,但在实例化该委托属性以使委托调用工作之后,您必须将该委托属性实际设置为某个对象。
(对不起,如果这很简单,但看起来你有一个非常基本的概念上的困难;如果我错过了这一点,道歉!)