带有 Web 视图的模态视图使 iOS7 中的应用程序崩溃
Posted
技术标签:
【中文标题】带有 Web 视图的模态视图使 iOS7 中的应用程序崩溃【英文标题】:Modal view with Web view makes an app crash in iOS7 【发布时间】:2013-12-19 15:24:50 【问题描述】:我已经用 Objective-C 开发了两个月,所以我对这种语言和 ios 环境还是很陌生。我正在将一个适用于 iOS6 的应用更新到 iOS7。
当显示带有 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];
【问题讨论】:
什么是 self.initialURL、NSString 或 NSURLself.initialURL
的数据类型是什么?
self.initialURL 是 NSURL 的类型
我们能看到self.initialURL
被初始化/设置的代码吗?
如何确定调试器中的值?尝试在 if 行设置 ab 断点,然后在调试器中输入 po self.initialURL
并逐字告诉我们结果是什么。
【参考方案1】:
我假设 iOS 在传递给 initWithURL:
方法的 self.initialURL
对象上调用 absoluteURL
。但是,接收到这个消息的对象是NSMallocBlock
,所以好像有问题。我假设您的self.initialURL
对象应该是NSURL
类型。如果是这样,这将表明内存管理问题导致self.initalURL
的指针指向内存中的其他位置(而不是您希望它指向的对象)。
您可以尝试使用 NSZombiesEnabled 运行您的应用程序,这可以防止任何对象被实际释放,而是在仍然访问已删除的对象时向您发出警告。 您可以在方案中激活 NSZombies 来运行您的应用程序(在 Xcode 右上角的工具栏中单击应用程序的名称,然后从弹出菜单中选择“编辑方案...”)。在“诊断”选项卡的运行配置中,有一个用于激活僵尸对象的复选框。
【讨论】:
谢谢,我去试试。 这不起作用,这使得 self.initialURL 变量为 NULL 你是什么意思它“使它为 NULL”?您确定您刚刚激活了该复选框并再次运行它吗? 在 iOS 7 上激活此选项运行应用程序会给我一个 null self.initialURL 变量,而在 iOS6 中运行它可以正常工作。 不,我不知道这些变化。您是否在模拟器上进行了两次运行?或者您是否使用了两种不同的设备? iPhone 新的 64 位处理器的内存管理实现可能存在差异。或者您是否使用了自己代码的不同版本,例如#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
,这会导致您的代码有两个不同版本,而 iOS 7 版本存在内存错误?以上是关于带有 Web 视图的模态视图使 iOS7 中的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章