![](/img/trans.png)
[英]objective C OSX - Delegate- unrecognized selector sent to instance
[英]Objective C - Unrecognized delegate
我是 Objective C 的新手,並試圖掌握委托的概念。 我有以下代碼,並在構建中出現警告和錯誤的地方發表了評論。我正在使用最新版本的 Xcode 並使用故事板。
從 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
從 MainViewController.m
#import "MainViewController.h"
#import "FinalViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)writeToMe
{
[self.delegate sayHello];
}
. . .
@end
來自 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
來自 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
我在這個網站上研究過類似問題的問題和回應,但沒有找到使用 Storyboard 的解決方案。
改變:
#import "MainViewController.h"
#import "FinalViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)writeToMe
{
[self.delegate sayHello];
}
. . .
到:
#import "MainViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)writeToMe
{
[self.delegate sayHello];
}
. . .
還:
#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
到
#import <UIKit/UIKit.h>
@protocol MainViewControllerDelegate <NSObject>
- (void)sayHello;
@end
@interface MainViewController : UIViewController
@property (nonatomic, weak) id <MainViewControllerDelegate> delegate;
- (void)writeToMe;
. . .
@end
- - - - - - - - - - - - - - 編輯 - - - - - - - - - - - --------------
改變
@interface FinalViewController : UIViewController <NSCoding, MainViewController>
到
@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate>
這可能是一個錯字,但是:
@interface FinalViewController : UIViewController <NSCoding, MainViewController>
應該:
@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate>
同時從MainViewController.h
刪除"FinalViewController.h"
的導入。
並且您的其他警告可以通過更改來修復:
@interface FinalViewController ()
到:
@interface FinalViewController () < MFMailComposeViewControllerDelegate>
並改變:
mainVC.delegate = self;
到:
mainVC.mailComposeDelegate = self;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.