0

アプリの下部に広告を表示する回転バナーがあります。ユーザーが回転をクリックすると、シンプルなWebビューを備えたビューコントローラーが表示され、上部のツールバーにバナー固有のWebページが表示されます。ツールバーに閉じるボタンが必要なことを除けば、これはすべて正常に機能します。何らかの理由で、閉じるボタンを、クリックするとログに「閉じる」と表示されるアクションにリンクした後。アプリを実行してボタンをクリックすると、エラーログにメッセージが表示されずに不正アクセスエラーが発生します。

これは、Webビューを備えたビューコントローラが表示される場所です。これは、アプリのどこからでもアクセスできるアプリデリゲートのメソッドから呼び出されます。

BannerViewer* viewer = [BannerViewer alloc];
[viewer setUrl:db.WEBurl];
[_window addSubview: viewer.view];

BannerViewer.h

@interface BannerViewer : UIViewController {
        IBOutlet UIWebView* webView;
        IBOutlet UIBarButtonItem* close;
        IBOutlet UINavigationBar* navBar;
        NSURL *url;
    }

    @property(nonatomic,strong)IBOutlet UIWebView* webView;
    @property(nonatomic,strong)NSURL *url;
    @property(nonatomic,strong)IBOutlet UIBarButtonItem* close;
    @property(nonatomic,strong)IBOutlet UINavigationBar* navBar;
    -(IBAction)closeWindow:(id)sender;
    @end

BannerViewer.m

-(IBAction)closeWindow:(id)sender{
    NSLog(@"close");
}

事前に助けてくれてありがとう!

4

2 に答える 2

1
BannerViewer* viewer = [BannerViewer alloc];

オブジェクトを割り当てた後、指定された初期化子を呼び出して初期化する必要があります。プログラムによってインスタンス化されたサブクラスのUIViewController場合、次のようなものが必要になります。

BannerViewer* viewer = [[BannerViewer alloc] initWithNibName:nil bundle:nil];
于 2012-08-30T15:32:30.847 に答える
0

私もこの問題に遭遇しました。

これを修正するために、新しいUIViewControllerをプロパティにしました。

@property (nonatomic, strong) ThirdViewController *theSecondView;

xcodeがこれについて私に提供している少量の情報に基づくと、これはメモリの問題のようです。ボタンを押すとビューが作成されますが、ARCは作成後すぐにメモリ内のスポットを解放するため、ボタンをクリックするとXcodeが適切にスローされます。

強力なプロパティが使用されている場合、新しいビューはメモリ内に強力な参照を保持しますが、親ビューのコントローラーも解放されるまで解放されません。

于 2013-03-02T22:39:44.107 に答える