簡體   English   中英

目標 C - 無法識別的委托

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM