使用Web视图的模态视图会在iOS7中导致应用程序崩溃

时间:2013-12-19 15:24:50

标签: ios objective-c ios7

我已经在Objective-C中开发了两个月,所以我对这个语言和iOS环境都很陌生。我正在为iOS7更新一个适用于iOS6的应用程序。

当出现带有Web视图的模态视图时,我收到了下一个错误,仅在iOS7中,这在iOS6中有效。里面有一个URL请求,但我找不到导致错误的原因。

'-[__NSMallocBlock__ absoluteURL]: unrecognized selector sent to instance 0x16e8b020'

这是模态视图控制器上的viewWillAppear方法:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!self.webView.request) {
        //THE NEXT LINE THROWS THE ERROR
        NSURLRequest *req = [[NSURLRequest alloc] initWithURL:self.initialURL];
        [self.webView loadRequest:req];
    }
}

也许我在做一些愚蠢的事情,但现在我真的不知道在哪里看。

如果有人之前经历过类似的事情,我会感激一些帮助。提前谢谢。

修改

@interface MyViewController ()
@property (copy, nonatomic) NSURL *initialURL;
@end

@implementation MyViewController

- (id)initWithURL:(NSURL *)initialURL
{
    self = [super init];
    if (self) {
        _initialURL = initialURL;

        _webView = [[UIWebView alloc] init];
        _webView.backgroundColor = [UIColor clearColor];
        _webView.opaque = NO;
        _webView.delegate = self;
        [self.view addSubview:_webView];

        self.modalPresentationStyle = UIModalPresentationFormSheet;
        self.view.backgroundColor = [UIColor whiteColor];
    }
    return self;
}

方法调用:

self.modalWebViewController = [[[MyViewController alloc] initWithURL:url] autorelease];

1 个答案:

答案 0 :(得分:3)

我假设iOS调用传递给absoluteURL方法的self.initialURL对象上的initWithURL:。但是,收到此消息的对象是NSMallocBlock,因此似乎有问题。我假设您的self.initialURL对象应该是NSURL类型。如果是这样,这将指示内存管理问题导致self.initalURL的指针指向内存中的其他位置(而不是指向您希望它指向的对象)。

您可以尝试使用NSZombiesEnabled运行您的应用程序,以防止实际释放任何对象,并在仍然访问已删除的对象时警告您。 您可以在方案中激活NSZombies来运行您的应用程序(在右上角的Xcode工具栏中单击您的应用程序名称,然后从弹出窗口中选择"编辑方案......"菜单)。在"诊断"中的运行配置中选项卡上有一个用于激活Zombie对象的复选框。 enter image description here