0

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

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

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 回答