代码之家  ›  专栏  ›  技术社区  ›  Swr79

协议中的方法未在iOS中实现

  •  2
  • Swr79  · 技术社区  · 13 年前

    我不理解,因为错误显示为“协议中的方法未实现”

    我的协议.h

    #import <Foundation/Foundation.h>
    
    @protocol myProtocol <NSObject>
    
    -(UIImage *)transferImage;
    
    @end
    

    视图控制器.h

    #import "SecondClass.h"
    
    @interface ViewController : UIViewController<myProtocol, UINavigationControllerDelegate>
    
    {
    UIView *view;
    
    }
    
    @property (nonatomic,retain) UIImageView *imageView;
    
    - (IBAction)sendImage:(id)sender;
    
    @end
    

    视图控制器.m

    #import "ViewController.h"
    #import "SecondViewController.h"
    #import "myProtocol.h"
    @interface ViewController ()
    @end
    @implementation ViewController
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    
    _imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"VoodooVibe@2x.png"]];
    
    [view addSubview:_imageView];
    
    NSLog(@"I am in VC.m");
    }
    
    -(UIImage *)transferImage{
    NSLog(@"I am in transferImage");
    return _imageView.image;}
    - (IBAction)sendImage:(id)sender {
    SecondViewController *secClass = [[SecondViewController alloc]init];
    

    secClass.delete=self;[secClass调用转移];NSLog(@“我是发件人”);[self.navigationController pushViewController:secClass动画:YES];}

    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    @end
    

    SecondViewController.h

    #import <UIKit/UIKit.h>
    
    #import "myProtocol.h"
    
    #import "ViewController.h"
    
    @interface SecondViewController :               UIViewController<myProtocol,UINavigationControllerDelegate> {
    
    UIView *secondView;
    
    IBOutlet UIImageView *myImage;
    
    id <myProtocol> myDelegate;
    }
    
    @property (nonatomic,strong) UIImageView *myImage;
    
    @property(nonatomic,weak) id delegate;
    
    -(void)callTransfer;
    
    @end
    

    SecondViewController.m

    #import "SecondViewController.h"
    
    #import "ViewController.h"
    
    #import "myProtocol.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    @synthesize delegate,myImage;
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
    }
    
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    [secondView addSubview:myImage];
    }
    -(void)callTransfer
    
    {
    myImage.image=[delegate performSelector:@selector(transferImage)];
    
    myImage.image=[UIImage imageNamed:@"VoodooVibe@2x.png"];
    
    NSLog(@"%@",myImage.image);
    
    NSLog(@"I am in call transfer");
    
    }
    
    
    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    
    @end
    
    2 回复  |  直到 13 年前
        1
  •  5
  •   Alex Cio Olie    13 年前

    你打电话给 delegate 方法内部 SecondViewController 但你没有插入。如果你收到这样的警告 ... not implemented 它只是说,你忘了包含一个方法。 你可以插入这样的方法

    -(UIImage *)transferImage{
        //do something here if delegate has been called
    }
    

    或者您只需在方法上方添加一个参数 代表 块:

    @optional
    

    如果不指定,则所有方法都将设置为 @required 最初的

        2
  •  3
  •   Singh    13 年前

    这很简单,因为您已经在协议实现中声明了一个方法,但尚未实现相同的方法。在您的第二个VC中,您没有实现“transfer image”方法。所以编译器正在生成一个警告