我有一个使用顶栏导航和MapView的应用程序。在地图视图中,我放置了一些注释,在选择注释时,按下显示按钮进入子视图,然后使用后退按钮返回MapView我的应用程序崩溃。它没有给我任何错误。
任何人都可以帮我弄清楚为什么我的应用程序会崩溃吗?
我制作了一段短片,展示了这次神秘的崩溃(因为我担心我不能很好地解释它)。
可以在此链接http://snuzzer.dk/pub/iPhoneAppMapKitCrash.mov
上看到该视频请告诉我您是否需要查看任何代码以确定崩溃的原因。我不确定为什么代码是必要的,因为我没有收到任何错误。
编辑:这是我的堆栈跟踪的输出:
#0 0x01275a63 in objc_msgSend
#1 0x0586c860 in ??
#2 0x0037ef1d in -[UINavigationController setDisappearingViewController:]
#3 0x0037c4f6 in -[UINavigationController _clearLastOperation]
#4 0x0037ce3f in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
#5 0x00509e23 in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:]
#6 0x0050afd2 in -[UINavigationTransitionView _cleanupTransition]
#7 0x002f6665 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
#8 0x002f64f7 in -[UIViewAnimationState animationDidStop:finished:]
#9 0x01ffa6cb in run_animation_callbacks
#10 0x01ffa589 in CA::timer_callback
#11 0x010f4fe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#12 0x010f6594 in __CFRunLoopDoTimer
#13 0x01052cc9 in __CFRunLoopRun
#14 0x01052240 in CFRunLoopRunSpecific
#15 0x01052161 in CFRunLoopRunInMode
#16 0x01a48268 in GSEventRunModal
#17 0x01a4832d in GSEventRun
#18 0x002d442e in UIApplicationMain
#19 0x00002918 in main at main.m:14
编辑:似乎当我没有发布我的annotationViewController时,应用程序不会崩溃。我将继续使用该应用程序,看看这是否正确。任何人都可以告诉我这是否正确,如果是,为什么?我什么时候会释放它呢?
- (void)mapView:(MKMapView *)aMapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
for(MyAnnotation* a in mapView.annotations) { // searching for chosen annotation
if(view.annotation == a) {
// set array from plist
NSString *path = [[NSBundle mainBundle] pathForResource:@"Annotations" ofType:@"plist"];
NSMutableArray* anns = [[NSMutableArray alloc] initWithContentsOfFile:path];
AnnotationDetailViewController *annotationDetailViewController = [[AnnotationDetailViewController alloc] initWithNibName:@"AnnotationDetailViewController" bundle:nil];
annotationDetailViewController.ann = [anns objectAtIndex:[a.annId intValue]];
[self.navigationController pushViewController:annotationDetailViewController animated:YES];
[annotationDetailViewController release]; // this is the one that I think will correct the error
[anns release];
}
}
}
答案 0 :(得分:0)
你应该在AnnotationDetailViewController
中寻找一个你保持不足/过度释放的ivar。我会怀疑一些UIView,也许是你没有配置保留的IBOutlet,特别是如果你也未能在viewDidUnload
中将它设置为nil。如果你还没有,我建议你阅读Memory Management of Nib Objects。
如果没有代码或者有关变量的更多信息,很难对其进行调试,但这就是我在崩溃的地方看到的地方。