2011-08-26 25 views
1

我收到了這個神祕的信息:wait_fences:未能收到回覆:10004003 我用Google搜索了一下,有人認爲這與沒有正確解僱UITextField或Alert有關。我有我的應用程序中的一個文本框,我向你保證,我使用resignFirstResponder,等等正確釋放它。 當我從子視圖打開MPMusicPickerController時,我收到此消息,這是否有任何區別。我真的需要解決這個問題,因爲它搞亂了我的整個應用程序!wait_fences:未能收到回覆:10004003?

感謝, 布拉德

EDIT1:

- (IBAction)openMediaPicker:(id)sender { 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeAny]; 
    mediaPicker.delegate = self; 
    mediaPicker.allowsPickingMultipleItems = YES; 
    mediaPicker.prompt = @"Select songs to play"; 
    [self presentModalViewController:mediaPicker animated:YES]; 
    [mediaPicker release]; 
} 

// Media picker delegate methods 
- (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { 

    AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDelegate.tr2 stop]; 
    [playstopButton setHidden:NO]; 
    [playstopButton setImage:[UIImage imageNamed:@"Stop-Music-Button.png"] forState:UIControlStateNormal]; 
    // We need to dismiss the picker 
    [self dismissModalViewControllerAnimated:YES]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 

    // Assign the selected item(s) to the music player and start playback. 
    [self.musicPlayer stop]; 
    [self.musicPlayer setQueueWithItemCollection:mediaItemCollection]; 
    [self.musicPlayer play]; 

} 

- (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { 
    // User did not select anything 
    // We need to dismiss the picker 
    [self dismissModalViewControllerAnimated:YES]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
} 
+1

它崩潰了你的應用程序? – Daniel

+0

@丹尼爾沒有它沒有崩潰的應用程序,但它只是不執行我需要它的方法很可能是因爲這個問題。 –

+1

也許顯示什麼不工作,我們可能能夠更容易地識別你的問題 – Daniel

回答

4

一般:

  1. 你不應該只在viewDidAppearviewWillAppear任何動畫。只准備你的數據,網點等在viewWillAppear

  2. 也是在wait_fences可能出現一個非常常見的情況是,當你有一個動畫對話框(如您的MPMediaPickerController),導致另一動畫視圖出現(如自定義模式UIViewController)等,在這種情況下,你需要「推遲」第二視圖 - 控制的呈現這樣的:

    [self performSelector:@selector(showMyOtherViewController) 
           withObject:nil 
           afterDelay:0.1]; 
    

還檢查了這個答案https://stackoverflow.com/7194182

編輯

一個好辦法 「調試」 衝突的動畫是簡單地設置動畫NO所以在你的代碼,而不是

[self presentModalViewController:mediaPicker animated:YES]; 
    [self dismissModalViewControllerAnimated:YES]; 

簡單地做:

[self presentModalViewController:mediaPicker animated:NO]; 
    [self dismissModalViewControllerAnimated:NO]; 

並檢查wait_fences錯誤是否消失且正確的行爲(但沒有動畫)實現了。如果是這種情況,你需要一些performSelector:withObject:afterDelay:-magic。

編輯:請注意,你可以做的iOS 5.0以下幾點:

[self dismissViewControllerAnimated:YES completion:^{ 
    [self presentViewController:anotherViewController animated:YES completion:NULL] 
} 

這意味着,首先,當前呈現的視圖控制器(如ModalViewController)被解僱,當動畫完成你可以調用另一個塊。在這種情況下顯示另一個UIViewController

+0

什麼是wait_fences?它是否使我的應用程序變得更慢,效率更低? –

+0

我不知道wait_fences究竟意味着什麼,但我認爲當動畫和UI繪圖相關的錯誤或「碰撞」發生時,它會被拋出。我認爲它不會讓你的應用程序變慢,但它表明你的代碼存在問題,你應該嘗試去解決這個問題。 – Besi

+0

我只是想讓你知道你是我的英雄,一直試圖解決這個問題好幾天,並且performSelector:withObject:afterDelay:方法取得了訣竅。 – robhasacamera

0

我還注意到,替換clickedButtonAtIndex:與didDismissWithButtonIndex:當使用UIActionSheet或UIAlertView似乎使錯誤消息消失。

相關問題