2014-03-26 66 views
-1

我是Objective C的新手,并试图理解代表的概念。我有下面的代码,并且已经在构建中发生警告和错误的地方发表了评论。我正在使用最新版本的Xcode并使用Storyboard。客观C - 无法识别的代表

从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的解决方案。

回答

0

变化:

#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 

---------------------------编辑--------------------- ---------------

变化

@interface FinalViewController : UIViewController <NSCoding, MainViewController> 

@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate> 
+0

CW0007007:我按照您的建议更改了代码,仍然收到相同的错误。 –

+0

CW0007007:构建成功,但NSLog语句未出现在控制台中。 –

+0

在这里看到我的答案如何正确设置代理人: http://stackoverflow.com/questions/21331523/how-to-declare-events-and-delegates-in-objective-c/21​​331771#21331771 – CW0007007

0

这可能是一个错字,但:

@interface FinalViewController : UIViewController <NSCoding, MainViewController> 

应be:

@interface FinalViewController : UIViewController <NSCoding, MainViewControllerDelegate> 

还从MainViewController.h删除"FinalViewController.h"的导入。

和你其他的警告可以通过改变固定:

@interface FinalViewController() 

到:

@interface FinalViewController() < MFMailComposeViewControllerDelegate> 

和变化:

mainVC.delegate = self; 

到:

mainVC.mailComposeDelegate = self; 
+0

maddy:删除FinalViewController.h导入导致构建成功,但协议方法未被调用。添加会导致错误,指出无法定位协议。 –