简体   繁体   English

目标 C - 无法识别的委托

[英]Objective C - Unrecognized delegate

I am new to Objective C and trying to grasp the concept of a delegate.我是 Objective C 的新手,并试图掌握委托的概念。 I have the following code and have made comments where a warning and an error occur with the build.I am using the latest version of Xcode and using a Storyboard.我有以下代码,并在构建中出现警告和错误的地方发表了评论。我正在使用最新版本的 Xcode 并使用故事板。

From MainViewController.h从 MainViewController.h

#import <UIKit/UIKit.h>
#import "FinalViewController.h"

@class MainViewController;
@protocol MainViewControllerDelegate <NSObject>
- (void)sayHello;
@end

@interface MainViewController : UIViewController
@property (nonatomic, strong) id <MainViewControllerDelegate> delegate;
- (void)writeToMe;
. . .
@end

From MainViewController.m从 MainViewController.m

#import "MainViewController.h"
#import "FinalViewController.h"
@interface MainViewController ()
@end

@implementation MainViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)writeToMe
{
    [self.delegate sayHello];
}
. . .
@end

From FinalViewController.h来自 FinalViewController.h

#import <UIKit/UIKit.h>
#import "MainViewController.h"

@interface FinalViewController : UIViewController <NSCoding, MainViewController> //The ERROR below appears
    //ERROR:Cannot find protocol declaration for ‘MainViewControllerDelegate’; did you mean ‘UIPageViewControllerDelegate’?
    . . .
@end

From FinalViewController.m来自 FinalViewController.m

#import "FinalViewController.h"
@interface FinalViewController ()
@end

@implementation FinalViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    MainViewController *mainVC;
    mainVC.delegate = self; //causes WARNING below
    //WARNING:Assigning to ‘id <MainViewControllerDelegate> from incompatible type ‘FinalViewController *const__strong’

    [mainVC writeToMe];
    . . .
}

- (void)sayHello
{
    NSLog(@"sayHello called");
}
@end

I have researched problems and responses to a similar problem on this web site, but have not found a solution using Storyboard.我在这个网站上研究过类似问题的问题和回应,但没有找到使用 Storyboard 的解决方案。

Change:改变:

#import "MainViewController.h"
#import "FinalViewController.h"
@interface MainViewController ()
@end

@implementation MainViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)writeToMe
{
    [self.delegate sayHello];
}
. . .

TO:到:

#import "MainViewController.h"
@interface MainViewController ()
@end

@implementation MainViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)writeToMe
{
    [self.delegate sayHello];
}
. . .

ALSO:还:

#import <UIKit/UIKit.h>
#import "FinalViewController.h"

@class MainViewController;
@protocol MainViewControllerDelegate <NSObject>
- (void)sayHello;
@end

@interface MainViewController : UIViewController
@property (nonatomic, strong) id <MainViewControllerDelegate> delegate;
- (void)writeToMe;
. . .
@end

TO

#import <UIKit/UIKit.h>


@protocol MainViewControllerDelegate <NSObject>
- (void)sayHello;
@end

@interface MainViewController : UIViewController
@property (nonatomic, weak) id <MainViewControllerDelegate> delegate;
- (void)writeToMe;
. . .
@end

--------------------------- EDIT ------------------------------------ - - - - - - - - - - - - - - 编辑 - - - - - - - - - - - --------------

Change改变

@interface FinalViewController : UIViewController <NSCoding, MainViewController>

to

@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate>

This might be a typo but:这可能是一个错字,但是:

@interface FinalViewController : UIViewController <NSCoding, MainViewController>

should be:应该:

@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate>

Also remove the import of "FinalViewController.h" from MainViewController.h .同时从MainViewController.h删除"FinalViewController.h"的导入。

And your other warning can be fixed by changing:并且您的其他警告可以通过更改来修复:

@interface FinalViewController ()

to:到:

@interface FinalViewController () < MFMailComposeViewControllerDelegate>

and change:并改变:

mainVC.delegate = self;

to:到:

mainVC.mailComposeDelegate = self;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM