将新委托添加到新控制器的问题

时间:2015-09-14 14:47:37

标签: ios objective-c

我试图找出如何在LocationViewController和SetScoringTableViewController中获取委托,并在GameDetailsTableViewController中实现它们。 LocationViewControllerDelegate已经工作,但是当我添加新的SetScoringTableViewController时,程序出错了。

LocationViewController.h

#import "ViewController.h"

@class LocationViewController;

 @protocol LocationViewControllerDelegate <NSObject>

- (void)addItemViewController:(LocationViewController *)controller didFinishEnteringItem:(NSString *)name;

 @end

@interface LocationViewController : UIViewController
  @property (nonatomic, weak) id <LocationViewControllerDelegate> delegate;
    @end

SetScoringTableViewController.h

#import <UIKit/UIKit.h>
#import "GameDetailsTableViewController.h"
#import "LocationViewController.h"

@class SetScoringTableViewController;

@protocol SetScoringTableViewControllerDelegate <NSObject>

- (void)addItemViewControllerSS:(SetScoringTableViewController *)SScontroller didFinishEnteringItemSS:(NSString *)SSname;

@end

 @interface SetScoringTableViewController : UITableViewController
    @property (nonatomic, strong) id <SetScoringTableViewControllerDelegate> SSdelegate;

    @end

GameDetailsTableViewController.h

#import <UIKit/UIKit.h>
#import "LocationViewController.h"
#import "SetScoringTableViewController.h"

@interface MainViewController : UITableViewController  <LocationViewControllerDelegate, SetScoringTableViewControllerDelegate>

当我运行这个时,我收到一个错误:“找不到'SetScoringTableViewControllerDelegate'的协议声明,即使我有。 我找到解决这个问题的唯一方法是将“SetScoringTableViewController委托放在LocationView控制器中,但我知道这是不对的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

你有一个依赖循环:

SetScoringTableViewController.h

#import "GameDetailsTableViewController.h"

GameDetailsTableViewController.h

#import "SetScoringTableViewController.h"

但看起来您可以删除#import "GameDetailsTableViewController.h",因为在头文件中没有提及它。

答案 1 :(得分:2)

您遇到的是一个#import cycle。打破导入循环 删除此导入行:

#import "GameDetailsTableViewController.h"

来自SetScoringTableViewController.h并将其放入.m文件中。

答案 2 :(得分:0)

尝试在不同的.h文件中分隔委托。