2009-12-11 2 views
0

처음 시도하는 동안 그것이 작동하지 않고 오류가 ...내 프로토콜 방법은 트리거되지 및 오류 프로토콜 작업

내가 정의되지 및 대리인 (BlockPopViewController)에 protocoll을 구현 한 하나되지 않습니다. 그런 다음 UIViewController (BoardViewController)에서보기에 대리자에 하위보기로 추가 된 뷰에 액세스하려고합니다.

결과적으로 프로토콜의 메소드에 대한 요청이 오류를 생성하지 않지만 메소드가 트리거되지 않습니다. 누군가가 아이디어를 가지고 있다면 가장 높이 평가 될 것입니다. 미리 감사드립니다!

BlockPopViewController.h

#import "DirectionViewController.h" 

@class BoardViewController; 

@protocol BVCProtocol 

- (void)testing; 

@end 

@interface BlockPopViewController : UIViewController <BVCProtocol> {} 

-(void)testing; 

@end 

BlockPopViewController.m

@implementation BlockPopViewController 

-(void)testing{ 
    NSLog(@"Testing in delegate BlockPopViewController"); 
} 

@end 

BoardViewController.h

@class BoardView; //This I cannot import, I think this should be ok instead. Probably cyclic import... 
@class Bric; //This I cannot import, I think this should be ok instead. Probably cyclic import... 


@protocol BVCProtocol; 

@interface BoardViewController : UIViewController { 

} 

@property(nonatomic, assign) id <BVCProtocol> blockPopViewController; 

@end 

BoardViewController.m

#import "BlockPopViewController.h" 
#import "BoardViewController.h" 

@implementation BoardViewController 

@synthesize blockPopViewController; 

-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event{ 

    NSLog(@"INSIDE TOUCHESENDED"); 
    [[self blockPopViewController] testing]; 

} 
+0

NSLog (@ "% @", [self blockPopViewController])를'[[self blockPopViewController] testing]'바로 위에 놓으면 출력은 어떻게됩니까? –

답변

1

BlockPopViewController가 BVCProtocol 프로토콜을 구현한다고 말하는 BlockPopViewController 클래스의 선언이 없습니다.

적절한 메모리 관리 동작을 얻으려면 BVCProtocol에서 NSObject를 구현해야합니다. 또한 프로토콜 구현의 인스턴스에서 NSObject 메시지를 사용할 때 컴파일러 경고를 방지하기 위해 NSObject 프로토콜에서 모든 프로토콜을 파생해야합니다. BlockPopViewController.h에서

당신이 필요합니다

@protocol BVCProtocol <NSObject> 
- (void) testing; 
@end 


@interface BlockPopViewController : UIViewController <BVCProtocol> 
@end 

는 BoardViewController.h에서 당신은 또한 "BlockPopViewController.h을"# import를해야합니다. 그렇지 않으면 컴파일러는 BlockPopViewController가 BVCProtocol을 구현한다는 사실과 BVCProtocol에 대해 아무것도 알지 못합니다.

프로토콜을 자체 .h 파일로 선언하고 .h 파일에서 가져 와서 프로토콜 구현을 선언하는 것이 더 합리적입니다.

this little tutorial helpful을 찾을 수 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다.하지만 "BlockPopViewController : NSObject "을 수행 할 때 BlockPopViewController가 UIViewController를 올바르게 상속받지 못해서 오류가 발생합니다 ... 결국, 모든 객체는 NSObject에서 상속되므로 정말 필요합니까? 나는 Ojbective-C를 처음 사용하기 때문에 뭔가 근본적인 것을 놓쳤습니다. – Nicsoft

+0

자습서를 확인했습니다. 대신 "@interface BlockPopViewController : UIViewController "이라고 가정합니다. 난 당신이 설명한대로, 여전히 방아쇠를 당긴 방법, 그리고 여전히 오류 ... 자습서에 따르면, 난 정의 "ID blockPopViewController;" 내 BoardViewController뿐만 아니라 (전에 "id blockPopViewController;"를 수행하기 전에, 위의 내용을 잊어 버렸습니다). 행동에도 차이는 없습니다. – Nicsoft

+0

죄송합니다, 그 BlockPopViewController UIViewController 파생 된 - 응답을 업데이트 싶었어. – VoidPointer

0

선언 프로토콜 외부 @interface ... @end 컨텍스트

@protocol BVCProtocol 
- (void) testing; 
@end 


@interface BlockPopViewController : UIViewController <BVCProtocol> 
//... 
@end 
+0

죄송합니다. 위 행을 잊어 버렸습니다. 이제 수정되었습니다. 나는 항상 @interface 밖에 프로토콜을 정의했다. 그것을 바꿀 필요가 없었습니다 .... – Nicsoft

+0

추가 정보 : 만약 : if ([blockPopViewController conformsToProtocol : @protocol (BVCProtocol)]) { "그것은 NO를 반환합니다 ...하지만 그때 나는 왜 그것을 이해하지 못합니다. '티...? 또한 "BoardViewController의 인터페이스 선언을"@interface BoardViewController : UIViewController : UIViewController "으로 변경했는데 이제는"프로토콜의 정의가 없습니다. "BVCProtocol이 발견되었습니다. 문제가 있다는 느낌이 들었습니다. 어떤 식 으로든 프로토콜 정의를 찾는 것 ... 그러나 이유는 모르겠다. – Nicsoft

+0

BoardViewController를 선언 한 .h- 파일에서 BVCProtocol을 선언하는 .h- 파일을 #import해야한다. # import BoardViewController를 구현 한 .m- 파일에서 BoardViewController를 선언하는 .h- 파일. – VoidPointer

0

내가 가진 문제는 내가 "BlockPopViewController"의 인스턴스를 생성하지 않았다고 생각. 나는 그것이 나를 위해 과도한 것처럼 보이기 때문에 프로토콜을 사용하지 않기 위해 나의 해결책을 바꾸었다. 나는 모든 관련 클래스들에 대해 완전한 통제권을 가지고 있으며 프로토콜을 사용하여 어떠한 이득도 얻지 못한다. 그러나 이것이 이것이 작동하지 않게 된 이유라고 생각합니다. 내가 알지 못하는 이런 종류의 상황에서 프로토콜을 사용하는 이유가 있다면, 저를 채우십시오.

0

대리인, 프로토콜 및 선택기에 대해 설명하는 Apple의 Communicating with Objects을 참조하십시오. Mac OS X에 등록되어 있지만 대부분 (전부는 아님)도 iOS에도 적용되는 것으로 보입니다.