2011-02-04 78 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在你不期望的时候被释放有关,而且一个不好的声明可能会导致这种情况。