2013-08-23 2 views
0

기본적으로 한 클래스에서 다른 클래스로 함수를 호출하고 싶습니다. 위임을 수행해야한다는 것을 알고 있습니다. 그러나 예를 들어 클래스 A와 B가 있습니다. 클래스 B에서 클래스 A의 함수를 호출해야하고 클래스 A의 클래스 B에서 function을 호출해야합니다.2 클래스에서 두 번 위임하거나 2 클래스에서 서로 함수를 호출하십시오.

결과적으로 가져 오기가 필요합니다. like

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 

문제는 내가 두 클래스 사이에 이런 식으로 가져올 수 없다는 것입니다. 어떻게해야합니까?

답변

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가를 ClassA에서 함수를 호출 할 수 있습니다 ClassB가에서 함수를 호출해야

@protocol SomeDelegate <NSObject> 

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

@end 

@interface ClassA : NSObject 

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

@end 

그러나, 당신은 수도 : 이것은를 ClassA의 헤더 것 수업을 설계 한 방식을 다시 검토하고 싶습니다.

+0

주셔서 감사합니다. uiviewcontroller와 uitableviewcontroller 사이의 함수를 호출하려고합니다. 나는이 그림과 같은 어떤 이유로 수입해야한다. 그러나, 내가 서로 다른 클래스로 가져올 때 나는 이런 오류가 발생했습니다. http://i43.tinypic.com/dwb212.png. 나는 이미 무엇을 해야할지 모르겠다. 나는 더 나은 코드 작성과 디자인이 필요하다. –

관련 문제