0

3つのビューを持つアプリがあります。3つのビューすべてに、画面の下部に広告バナーがあります。最初のビューは、このビューの広告バナーがクリックされたときに一時停止されるオーディオストリーマーを作成します。2番目のビューでAdBannerデリゲートメソッドを使用して、オーディオを停止/開始しようとしています。広告バナーが選択されると、AdBannerデリゲートメソッドはカスタムデリゲート関数を呼び出す必要があります。コードはコンパイルされて実行されますが、正しく機能しません。

NSLogを使用して、広告バナーがデリゲート関数を正しく呼び出していると判断しましたが、これはカスタムデリゲートを呼び出していません。

これが理にかなっていることを願っています。どんな助けでもいただければ幸いです。これが私のコードです。

SecondViewControlerHファイル

#import "SecondViewController.h"

@protocol demoViewControllerDelegate <NSObject>
@required

-(void)stopSent;
-(void)startSent;

@end

@interface SecondViewController ()
{    
    id<demoViewControllerDelegate> delegate;
}    
@property (nonatomic, assign) id<demoViewControllerDelegate> delegate;
@end

SecondViewControllerMファイル

@implementation SecondViewController
@synthesize delegate;

プロトコル

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave {
    [delegate stopSent];
    return YES;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner{
[delegate startSent];
}

FirstViewControllerHファイル

#import <QuartzCore/QuartzCore.h>
#import "iAd/iAd.h"
#import <MessageUI/MessageUI.h>
#import "AudioStreamer.h"
#import "Reachability.h"
#import "SecondViewController.h"
#import "MFAppDelegate.h"
#import "MFSideMenu.h"

Class secondViewConroller;

@interface DemoViewController : UIViewController <ADBannerViewDelegate,demoViewControllerDelegate> {
}

@end

FirstViewControllerMファイル

-(void)stopSent{
    if (isPlaying) {
        [streamer stop];
        wasPlaying=true;
    }
}

-(void)startSent{
    if (wasPlaying) {
        [streamer start];
         isPlaying=true;
    }
 }
4

1 に答える 1

2

プロトコルメソッドは、デリゲートターゲットとして指定したクラスに実装する必要があります。

インターフェイスに「」を指定したため、DemoViewController(またはFirstViewController)がデリゲートとして指定したオブジェクトのように見えます<ADBannerViewDelegate,demoViewControllerDelegate>

次に、Second View Controllerから、次のようにして、指定してデリゲートとして設定したオブジェクトを呼び出すことができます。

[delegate startSent];

[delegate stopSent];

bannerViewActionShouldBeginそれぞれ「」と「」のように見える適切な場所にありますbannerViewActionDidFinish

したがって、次の代わりに、デリゲートが適切に設定されていることも確認する必要があります。

[delegate startSent];

実際にこれを行う必要があります:

if(delegate)
    [delegate startSent];
else
    NSLog( @"delegate is null; we should figure out why" );
于 2012-09-16T19:09:24.927 に答える