UIViewController调用彼此的委托

ahe*_*ang 2 iphone objective-c ipad

我有两个UIViewController,每个都有它的委托,并且正在调用其中一个.一个类称为TopicViewController,另一个类是MentionViewController,代码如下所示:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import <RestKit/RestKit.h>
#import "Message.h"
#import "Imgur.h"
#import "URLViewController.h"
#import "CVore.h"
#import "NSData+Base64.h"
#import "Imgur.h"
#import "ProfileViewController.h"
#import "OptionsViewController.h"
#import "Three20/Three20.h"


@class DetailViewController;
@class MentionViewController;

@protocol DetailViewControllerDelegate

- (void) viewController:(DetailViewController*)viewCon withText:(NSString *) text;

@end


@interface DetailViewController : UIViewController <MentionViewControllerDelegate>


///////////////////////////////////////////////////////////////////////////////////

#import <UIKit/UIKit.h>
#import <RestKit/RestKit.h>
#import "Members.h"
#import "DetailViewController.h"
#import "Three20/Three20.h"

@class MentionViewController;

@protocol MentionViewControllerDelegate

- (void) viewController:(MentionViewController*)viewCon withUsername:(NSString *) text;

@end


@interface MentionViewController : UITableViewController <DetailViewControllerDelegate>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我将#import"MentionViewController.h"添加到DetailViewController时,它在MentioViewController中给出了以下错误:

Cannot find protocol declaration for DetailViewControllerDelegate.
Run Code Online (Sandbox Code Playgroud)

我知道这可能是由于圆柱形引用,但我该如何解决这个问题呢?

Aec*_*Liu 9

真的很奇怪.MentionViewController需要DetailViewController的头文件,而DetailViewController需要MentionViewController的头文件.It is a cycle.也许您需要创建一个空头文件,并将所有协议放在其中.例如,

MyProtocol.h

@class DetailViewController;
@class MentionViewController;

@protocol DetailViewControllerDelegate

- (void) viewController:(DetailViewController*)viewCon withText:(NSString *) text;

@end

@protocol MentionViewControllerDelegate

- (void) viewController:(MentionViewController*)viewCon withUsername:(NSString *) text;

@end
Run Code Online (Sandbox Code Playgroud)

#import MyProtocol.h在DetailViewController.h和MentionViewController.h中添加.


aeg*_*orz 5

您需要使用协议的前向声明,并仅导入实现文件中的标头.