单击横幅按钮项时应用程序崩溃

时间:2012-08-30 15:18:03

标签: objective-c xcode uitoolbar

我的应用程序底部有一个显示广告的旋转横幅,当用户点击旋转时,带有简单webview的视图控制器和顶部的工具栏显示特定于横幅的网页。这一切都很好,除了我需要工具栏中的关闭按钮。出于某种原因,我将关闭按钮链接到单击时应在日志中显示“关闭”的操作。我运行应用程序并单击按钮,并在错误日志中没有消息时发生错误的访问错误。

这是显示带有webview的viewcontroller的地方。它是从app委托中的方法调用的,可以从应用程序的任何位置访问。

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");
}

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

BannerViewer* viewer = [BannerViewer alloc];

分配对象后,需要通过调用指定的初始化程序对其进行初始化。对于以编程方式实例化的UIViewController的子类,您需要以下内容:

BannerViewer* viewer = [[BannerViewer alloc] initWithNibName:nil bundle:nil];

答案 1 :(得分:0)

我刚刚遇到这个问题。

为了解决这个问题,我将新的UIViewController变成了一个属性。

@property (nonatomic, strong) ThirdViewController *theSecondView;

基于xcode为我提供的微量信息,看起来这是一个内存问题。似乎正在发生的事情是当按下按钮时会创建视图,但ARC在创建后不久就会在内存中释放它,因此单击该按钮只会使Xcode适合。

如果使用了强属性,则新视图在内存中保留更强的引用,在父视图Controller也被释放之前不会释放。