0

基本上,我想从一个类调用另一个类。我知道我需要委托。但是,例如,有A类和B类。我需要从B类中调用A类中的函数,我还需要从A类中调用B类中的函数。

结果,我需要像这样导入

import "classA.h"  //to do in class B
import "classB.h"  //to do in class A

//then i may have delegate like this in both class
@protocol emailingroupViewControllerDelegate <NSObject>
-(void)updateGroupEmail :(NSString *)inputKey;
@end

问题是它不允许我在两个班级之间像这样导入。我应该怎么做?

4

1 回答 1

1

您的标题中有一个依赖循环。很容易解决;不是在每个头文件中包含其他类的头文件,而是使用@class指令并将头文件包含在实现文件中。

classA.h中,执行以下操作:

@class ClassB

@interface ClassA

...

@end

classA.m中,执行以下操作:

#import "classA.h"
#import "classB.h"

@implementation ClassA : NSObject

...

@end

classB.h中,执行以下操作:

@class ClassA

@interface ClassB

...

@end

最后,在 中classB.m,执行以下操作:

#import "classB.h"
#import "classA.h"

@implementation ClassB : NSObject

...

@end

但是,如果您尝试使用委托模式,您的委托应该实现协议而不是显式类。您应该在委托和在第三类中使用它的对象之间建立连接。这将是 ClassA 的标题:

@protocol SomeDelegate <NSObject>

- (void)classA:(ClassA *)classA didSomethingWithAString:(NSString *)string;

@end

@interface ClassA : NSObject

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

@end

但是,同样,如果您想要做的只是让 ClassA 调用 ClassB 中的函数,该函数可以调用 ClassA 中的函数,您可能需要重新检查您设计类的方式。

于 2013-08-23T14:49:59.177 回答