Ios 为什么我的委托为空?
我正在使用XCode 4.5.1构建一个iOS 6应用程序 我正在尝试使用一个协议,我的控制器可以使用它来检索图像。然而,尽管我这样称呼我的代表,但从未有人这样称呼它: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
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;
...
}