2014-09-12 3 views
0

나는 여전히 Objective-C를 처음 접했지만 자신의 앱을 성공적으로 만들었으며 Chartboost의 비디오 광고 구현에 약간의 문제가 있습니다.Objective-C에서 선택적 프로토콜 방법은 어떻게 사용합니까?

나는 비디오를 보는 대가로 사용자에게 자유로운 삶을 제공하는 팝업을 만드는 보상 비디오를 구현 중입니다. 나는 정상적으로 작동하는 팝업을 얻을 수있다. 그러나 사용자가 비디오를보기로 결정했는지 여부는 알 수 없습니다.

은 내가 Chartboost.h 파일이 @optional 아래에 나열된에 대한 적절한 방법을 가지고 알고,하지만 난 방법

- (void)didClickRewardedVideo:(CBLocation)location; 

또한주의하는 것이, 내 Level1.m 파일이 사용하는 단서가 없다 Chartboost.m은 그들이 준 프레임 워크에 포함되어 있지 않습니다.

도움 주셔서 감사합니다.

+0

[질문] (http://stackoverflow.com/q/9018764/429427) 및 [답변] (http://stackoverflow.com/a/9018829/429427)을 참조하십시오. 'Chartboost'는 단지 프로토콜 일뿐입니다. (Chartboost.h에'@ interface '가 없다고 추측합니까?) 이것은'.m '파일이 존재하지 않는 이유입니다. - 프로토콜은 구현체가 아니라 단지 인터페이스라고 선언되었습니다. . 어떤 경우에는 객체가 해당 메소드를 구현하는지 확인한 후이 프로토콜을 따르는 객체에서'didClickRewardedVideo :'를 호출해야합니다. – Stuart

+0

자, 알겠습니다. 이것은 단지 선언 된 인터페이스입니다. 하지만 당신이 의미하는 바를 잘 이해하지 못합니다. "didClickRewardedVideo를 호출해야합니다 : 객체가 해당 메소드를 구현하는지 확인한 후이 프로토콜을 따르는 객체에서." 나는 그 질문을 읽고 너와 연결된 대답을하지만, 나는 아직도 이해하지 못한다. 이것을 달성하고 싶습니다. if (didClickRewardedVideo) {then do}. 미안해 - 난 아직도 새로운거야! –

+0

아, 미안하지만, 내가 잘못 생각한 것 같아. 나는 당신이 그 프로토콜을 따르는 당신 자신의 어떤 클래스에서 그 메소드를 구현하기를 원한다고 생각한다. 그리고 라이브러리는 적절한 시간에 그것을 호출 할 것이다. 아래 내 대답을 참조하십시오. – Stuart

답변

0

저는 Chartboost 라이브러리에 익숙하지 않지만, ChartboostDelegate은 델리게이트 객체와 마찬가지로 자신의 코드에 구현해야하는 프로토콜입니다. 도서관은 보상 비디오가 클릭되었을 때 등록 된 일부 객체에 didClickRewardedVideo:로 전화 할 것입니다. Chartboost 인스턴스 또는 이와 유사한 인스턴스의 대리인으로 설정 했습니까?

그래서 당신 Level1 클래스는 프로토콜 준수를 선언하고 (당신이 필요로하는 경우 ... 그것은 결국 선택의하는) 방법을 구현해야

@interface Level1() <ChartboostDelegate> 
@end 

@implementation 

// ... 
// ... 

- (void)didClickRewardedVideo:(CBLocation)location 
{ 
    // Video was clicked. Do something appropriate. 
} 

@end 

당신의 위임 패턴에 대한 자세한 내용을보실 수 있습니다 코코아는 Concepts in Objective-C Programming 문서에 있습니다.

+0

안녕 스튜어트, 이것은 내가 당신의 제안을 기반으로 한 것입니다 : 내 Level1.h 파일에서 : @interface Level1 : CCNode - (void) didClickRewardedVideo : (CBLocation) location; 내 .m 파일에서 - (void) didClickRewardedVideo : (CBLocation) 위치 { CCLOG (@ "I CLICKED IT"); }' '[Chartboost showRewardedVideo : CBLocationGameOver];가 실행되고 비디오를 클릭하면 "CLICKED IT"가 표시되지만 아직 아무것도 얻지 못했습니다. @stuart –

+0

또한, @interface Chartboost : NSObject를 포함하는 Chartboost.h의'@protocol ChartboostDelegate;에 2 개의 프로토콜이 있습니다. 두 번째 프로토콜은 didClickRewardedVideo를 포함하고 있으며 다음과 같습니다 :'@protocol ChartboostDelegate @ optional' 아마도 도움이 될까요? –

+0

아 그래, 나는 그 프로토콜이'ChartboostDelegate'라고 기대했었다.그래서 라이브러리는'Chartboost' 클래스를 정의합니다.이 클래스는'Chartboost'의 델리게이트로 등록하는 객체에 델리게이트 콜백을 보냅니다 ('@interface Chartboost' 아래에 'delegate'라는 속성이 있습니다). 나는 당신이 대리인을 설정하지 않는다고 의심해 콜백을받지 못하고있다. 이는 보통 'Chartboost' 인스턴스를 생성 할 때 수행됩니다. 또한 Level1.h에'-didClickRewardedVideo :'를 선언 할 필요가 없다. 이것은'ChartboostDelegate'에 대한 적합성을 선언함으로써 암묵적으로 이루어진다. – Stuart

관련 문제