我正在使用带有导航控制器的ARC开发应用程序,第一个视图控制器有一个链接到ibaction的按钮,该按钮调用第二个视图控制器的推送。 在第二个viewcontroler中,一个按钮将视图控制器弹出到第一个视图控制器。当弹出有时我的应用程序崩溃时出现错误:“ - [Secondviewcontroller isKindOfClass:]:消息发送到解除分配的实例0xb181c00”。
这是我在推送秒的第一个视图控制器中的代码: (使用乐器,使用僵尸我会在此方法上收到僵尸消息)。
-(void)apriCassettoRivista {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
Secondviewcontroller *rivista = [[Secondviewcontroller alloc] init];
[self.navigationController pushViewController:rivista animated:true];
}
检测到的错误是推送第二个视图控制器的方法..我无法理解这一点。 我认为问题出在第二个视图控制器中..可能吗?当弹出第二个时我使用以下代码:
-(IBAction)indietro:(id)sender {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self.navigationController popViewControllerAnimated:TRUE];
}
任何人都可以帮助我吗?这是僵尸消息的屏幕:http://vincentvega.net/iphone/schermo.png
在我的第二个控制器中,我也有观察者,但我在视图中销毁它们将消失在secondviewcontroller中。
更新 经过几次测试后我发现问题是由CATiledLayer里面的CGPDFPageRef渲染引起的。如果我禁用了这个功能,我的应用程序永远不会崩溃。
解决 解决方案是使用此函数在我的scrollview中将所有uiview catiledlayer的委托设置为nil:
-(void)buttavia {
NSArray *subviews = [mainScrolla subviews];
for (UIView *subview in subviews) {
if ([subview isKindOfClass:[UIScrollView class]]) {
// Ho uno scrolla
//
NSArray *subviewsScrolla = [subview subviews];
for (UIView *subviewScrolla in subviewsScrolla) {
if ([subviewScrolla isKindOfClass:[UIView class]]) {
// Ho una view nello scrolla
//
if (subviewScrolla) {
((CATiledLayer *)subviewScrolla.layer).delegate = nil;
((CATiledLayer *)subviewScrolla.layer).contents = nil;
[subviewScrolla removeFromSuperview];
[subviewScrolla.layer removeFromSuperlayer];
}
}
}
}
}
}