2011-02-04 89 views
0

所以這是我的代碼:聲音爲什麼不播放?

在按下按鈕:

-(void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { 
    [self dismissModalViewControllerAnimated:YES]; 
self.selectedSong = mediaItemCollection; 
    NSLog(@"Selected song: %@", self.selectedSong); 
} 

後來:

-(void)waitUntilSpeechIsDone { 
    NSLog(@"Test"); 
    if ([audio isEqualToString:@"Music"]) { 
    if ([musicWhenToStart isEqualToString:@"Before"]) { 
     NSLog(@"Test"); 

     NSLog(@"Selected song: %@", self.selectedSong); 
     [self.musicPlayer stop]; 
     [self.musicPlayer setQueueWithItemCollection:self.selectedSong]; 
     [self.musicPlayer play]; 
    } 
    } 
} 

它的定義爲:

@interface RewriteViewController : UIViewController <MPMediaPickerControllerDelegate> { 

    MPMediaItemCollection *selectedSong; 

} 
@property(nonatomic,retain) MPMusicPlayerController *musicPlayer; 
@property(nonatomic,retain) MPMediaItemCollection *selectedSong; 


MPMediaItemCollection *selectedSong; 

然後兩者都在.m文件中合成。

好的,所以它通過了上半場罰款。 NSLog返回類似於「選擇的歌曲:」然後NSLog返回「測試」,(我把它放在那裏,所以我知道它有這麼遠,以防下一行出於某種原因崩潰)。然後當它到達下一行時,它返回「Selected song:(null)」。

任何想法爲什麼?

編輯:兩者都在dealloc中發佈。

+0

如果可以,請包含崩潰的堆棧跟蹤。 – raidfive 2011-02-04 20:17:12

+0

沒有崩潰。它只是返回爲空,所以音頻不播放。 – Andrew 2011-02-04 20:24:55

回答

0

看着你的界面文件,看起來你聲明瞭MPMediaItemCollection *selectedSong;兩次:/我不確定這是否是發佈問題時的錯字,但這可能與它有關。你崩潰的可能性很大程度上與selectedSong在你不期望的時候被釋放有關,而且一個不好的聲明可能會導致這種情況。