我已经在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];
答案 0 :(得分:3)
我假设iOS调用传递给absoluteURL
方法的self.initialURL
对象上的initWithURL:
。但是,收到此消息的对象是NSMallocBlock
,因此似乎有问题。我假设您的self.initialURL
对象应该是NSURL
类型。如果是这样,这将指示内存管理问题导致self.initalURL
的指针指向内存中的其他位置(而不是指向您希望它指向的对象)。
您可以尝试使用NSZombiesEnabled运行您的应用程序,以防止实际释放任何对象,并在仍然访问已删除的对象时警告您。
您可以在方案中激活NSZombies来运行您的应用程序(在右上角的Xcode工具栏中单击您的应用程序名称,然后从弹出窗口中选择"编辑方案......"菜单)。在"诊断"中的运行配置中选项卡上有一个用于激活Zombie对象的复选框。