[英]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.