Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C协议循环依赖?_Objective C_Ios_Interface_Protocols - Fatal编程技术网

Objective c 目标C协议循环依赖?

Objective c 目标C协议循环依赖?,objective-c,ios,interface,protocols,Objective C,Ios,Interface,Protocols,我在它自己的头文件中有一个protocolA,用作接口。 然后我有两个具体的类,它们是该协议的不同实现 现在,在我的ViewController中,我使用它来声明id类型的属性,它允许我交换实现,而VC对此一无所知 我还有protocolB,用于从这两个实现对象到VC的委托调用 问题是我有循环依赖 在协议A中,我需要声明一个id类型的“委托”属性。 在协议B中,委托方法向调用者发送引用,调用者是id类型的对象 有更好的设计吗 用例子更新,也许对其他人会有帮助 协议头: #import <

我在它自己的头文件中有一个protocolA,用作接口。 然后我有两个具体的类,它们是该协议的不同实现

现在,在我的ViewController中,我使用它来声明id类型的属性,它允许我交换实现,而VC对此一无所知

我还有protocolB,用于从这两个实现对象到VC的委托调用

问题是我有循环依赖

在协议A中,我需要声明一个id类型的“委托”属性。 在协议B中,委托方法向调用者发送引用,调用者是id类型的对象

有更好的设计吗


用例子更新,也许对其他人会有帮助

协议头:

#import <Foundation/Foundation.h>

 /*!
 Abstract interface for any Provider 
 */

@protocol DataProviderDatasource <NSObject>

@required
@property (nonatomic) id <DataProviderDelegate> delegate; 
-(void)update;

@end
#导入
/*!
任何提供者的抽象接口
*/
@协议数据提供者数据源
@必需的
@属性(非原子)id委托;
-(b)更新;
@结束
协议头

#import <Foundation/Foundation.h>
#import "DataProviderDatasource.h"
/*!
 Protocol that each  Data Provider implements to make delegate calls to notify its     delegate about data management operations.
 */

@protocol DataProviderDelegate <NSObject>

-(void)dataProviderWillUpdate:(id<DataProviderDatasource>)dataProvider;
-(void)dataProviderdidUpdate:(id<DataProviderDatasource>)dataProvider;
#导入
#导入“DataProviderDatasource.h”
/*!
每个数据提供程序实现的协议,用于进行委托调用以通知其委托有关数据管理操作。
*/
@协议DataProviderDelegate
-(void)dataProviderWillUpdate:(id)dataProvider;
-(void)dataProviderdidUpdate:(id)dataProvider;

@结束

与类类似,您可以转发声明协议:

@protocol MONProtocolB; // << forward declaration -- #import not required

@protocol MONProtocolA
- (void)setDensity:(NSValue<MONProtocolB>*)pValue;
                           ^^^^^^^^^^^^ << compiler recognizes this as an
                                           objc protocol
@end

@protocolb;//你可以发布一些代码来让上下文更清晰吗?对不起,但我有法律义务不发布任何代码。只要一些示例代码就好了。i、 e.调用类MyCustomViewController和协议MyCustomProtocol等。。。然后我们可以看到问题发生的地方。我添加了示例代码。。。但我并没有添加解决问题的前瞻性声明,以便人们看到问题所在;-)@EarlGrey我来晚了一点,但您想知道您发布的类
DataProviderDatasource
中有一个问题,对吗?因为我认为类不知道
DataProviderDelegate
。你能澄清你的意图吗?