Objective c 声明委托属性时出错

Objective c 声明委托属性时出错,objective-c,delegates,properties,Objective C,Delegates,Properties,这应该是一个简单的问题,但我很难弄明白。我试图在一个对象上创建一个属性,以便在prepareForSegue期间我可以告诉该对象它的委托是什么。我知道我可以用协议做到这一点,但我认为对于这种情况,直接方法是最简单的。不幸的是,以下代码导致编译器错误: #import <UIKit/UIKit.h> #import "PlanningViewController.h" @interface DepartmentViewController : UITableViewControlle

这应该是一个简单的问题,但我很难弄明白。我试图在一个对象上创建一个属性,以便在prepareForSegue期间我可以告诉该对象它的委托是什么。我知道我可以用协议做到这一点,但我认为对于这种情况,直接方法是最简单的。不幸的是,以下代码导致编译器错误:

#import <UIKit/UIKit.h>
#import "PlanningViewController.h"

@interface DepartmentViewController : UITableViewController

@property (nonatomic, weak) PlanningViewController *planningDelegate;

@end
我做错了什么

PlanningViewController.h如下所示:

#import <UIKit/UIKit.h>
#import "DepartmentViewController.h"

@interface PlanningViewController : UITableViewController


// Table cell connections
- (IBAction)addItemPressed:(id)sender;


@end
if ([self.delegate respondsToSelector:@selector(departmentViewController:isProcessingPeople:)]) {
    [self.delegate departmentViewController:self isProcessingPeople:people];
}
#导入
#导入“DepartmentViewController.h”
@界面规划视图控制器:UITableViewController
//表单元格连接
-(iAction)addTempressed:(id)发送方;
@结束

PlanningViewController.h
头文件中删除此行:

#import "DepartmentViewController.h"
#import <UIKit/UIKit.h>

@class PlanningViewController;

@interface DepartmentViewController : UITableViewController

@property (nonatomic, weak) PlanningViewController *planningDelegate;

@end
您的头文件中有一些循环

更好的是,使
DepartmentViewController.h
如下所示(无需在头文件中包含
PlanningViewController.h
):

#导入
@类计划视图控制器;
@接口部门视图控制器:UITableViewController
@属性(非原子,弱)PlanningViewController*planningDelegate;
@结束

我认为您忽略了委托模式的一个要点,即将对象解耦。声明此委托的最佳方式是:

#import <UIKit/UIKit.h>

@protocol DepartmentViewControllerDelegate; // forward declaration of protocol

@interface DepartmentViewController : UITableViewController

@property (nonatomic, weak) id <DepartmentViewControllerDelegate> delegate;

@end

@protocol DepartmentViewControllerDelegate
- (void)departmentViewController:(DepartmentViewController *)controller
              isProcessingPeople:(NSArray *)people
@end
在规划视图控制器中,您将实现以下方法:

- (void)departmentViewController:(DepartmentViewController *)controller
              isProcessingPeople:(NSArray *)people {
    // do necessary work here
}
这里的示例只是您可以发送给代理的一条消息的示例。您可以添加任何您需要的内容,但这使得控制器之间没有耦合。规划视图控制器了解有关部门控制器的所有信息,但部门控制器不需要了解有关规划控制器的任何信息


如果您想继续使用当前拥有的内容,只需认识到它不是真正的委托模式,您可能应该重命名您的属性。

请显示
PlanningViewController.h
的内容。我坚持使用它,但是,正如你所建议的,重命名以避免混淆。
- (void)departmentViewController:(DepartmentViewController *)controller
              isProcessingPeople:(NSArray *)people {
    // do necessary work here
}