0

我有一个视图控制器,它使用委托协议来传回字符串数组。我现在有另一个视图控制器,我想使用相同的协议,但我已经使用了它,我在 Xcode 中收到警告Duplicate protocol definition of 'SearchDetailsDelegate' is ignored

我需要这两个视图传回一个数组供父视图控制器解析。什么是更合适的方式来实现我在这里需要做的事情?关键价值观察会是这里的路吗?

4

2 回答 2

2

你有几个选择:

  1. 将您的协议重命名为不同的。

  2. 创建一个外部协议并在每个视图上采用该协议

  3. 向您的视图添加一个名为 ParentController 的属性,其类型为它的父级。

    @property (strong,nonatomic) ParentViewController *ParentController;

(合成偏离当然)

然后,在您的 viewController 中,当您实例化视图时,将 viewController 分配为父级

YourView *childView  = [[YourView alloc]init];
childView.parentController = self;

现在您可以在 viewController中添加一个可以接收字符串数组的方法

-(void)setStringsArray:(NSArray*)arr{
     //do what ever you need with the array
     //don't forget to add this method to your .h file so it will be visible
}

最后从视图发送字符串数组: [self.parentController setStringsArray:yourArray];

顺便说一句 ,如果您想知道发送数组的视图是什么,您可以:

-(void)setStringsArray:(NSArray*)arr fromView:(UIView*)senderView{
     //do what ever you need with the array
     //don't forget to add this method to your .h file so it will be visible
} 

并使用

    [self.parentController setStringsArray:yourArray fromView:self];

BTW 2 另一种选择是使用通知。

于 2012-10-15T10:35:26.160 回答
1

在单独的 .h 文件(目标 c 协议的新文件)中定义协议,然后将其包含在所需的视图控制器中。不建议在两个不同的视图控制器中重新定义相同的协议,因为在您的情况下

于 2012-10-15T10:28:51.483 回答