因此,當我點擊我的mapView中的標註附件時,幾秒鐘內沒有任何反應,因爲它正在發出url請求並解析它,所以我想顯示活動指示器,以便用戶不認爲它已凍結。下面的代碼:iPhone活動指示燈被延遲?
- (void)mapView:(MKMapView *)mv annotationView:(MKAnnotationView *)pin calloutAccessoryControlTapped:(UIControl *)control {
// start activity indicator
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSLog(@"tapped");
ArtPiece *artPiece = (ArtPiece *)pin.annotation;
//when annotation is tapped switches page to the art description page
artDescription *artD = [[artDescription alloc] initWithNibName:@"artDescription" bundle:nil];
artD.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
artD.startingLocation = mapView.userLocation.location.coordinate;
artD.selectedArtPiece = artPiece;
NSLog(@"0");
[self presentModalViewController:artD animated:YES];
NSLog(@"1");
[artD loadArt:artPiece];
NSLog(@"2");
// stop activity indicator
//[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[artD release];
}
奇怪(我反正,也許我失去了一些東西明顯,因爲我很沒有經驗),活動指示燈不顯示,直到方法完成後,和模態視圖開始動畫到視圖中。我把NSLogs放進去看看需要花費什麼時間。我在「0」和「1」之間停頓了2秒,在「1」和「2」之間停了兩秒鐘。然後指標終於顯示出來,所以我確信它由於某種原因一直等到該方法結束。任何想法爲什麼?
所以allDoneWaiting會成爲另一種方法:[UIApplication sharedApplication] .networkActivityIndicatorVisible = YES; ? – Ryan
它可能會根據您的需要做其他事情,但基本上,是的。任何接觸GUI的代碼都需要在主線程上運行。 –
好的謝謝你的幫助,還有一個問題:它崩潰並抱怨一個autorelease池,我需要圍繞doThingINeedToWaitFor方法做些什麼嗎? – Ryan