Навигация и MapKit приводят к сбою приложения - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть приложение, которое использует навигацию по верхней панели и 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];
        }
    }
}

1 Ответ

0 голосов
/ 16 февраля 2011

Вам следует искать ивара в AnnotationDetailViewController, который вы недостаточно удерживаете / переиздаваете. Я бы заподозрил некоторый UIView, возможно, IBOutlet, который вы не настроили для сохранения, особенно если вам также не удалось установить его равным nil в viewDidUnload. Я рекомендую вам прочитать Управление памятью объектов пера , если вы еще этого не сделали.

Трудно отладить это без кода или дополнительной информации о ваших переменных, но я бы посмотрел, где это происходит.

...