我正在使用带有导航控制器的 ARC 开发一个应用程序,第一个视图控制器有一个按钮链接到一个调用第二个视图控制器推送的 ibaction。在第二个视图控制器中,一个按钮将视图控制器弹出到第一个视图控制器。当弹出有时我的应用程序崩溃并出现错误时:“-[Secondviewcontroller isKindOfClass:]: message sent to deallocated instance 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 渲染引起的。如果我禁用此功能,我的应用程序永远不会崩溃。
已解决 解决方案是使用此功能在我的滚动视图中将所有 uiview catiledlayer 的代表设置为零:
-(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];
}
}
}
}
}
}