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 返回类似“Selected song:”然后 NSLog 返回“Test”,(我把它放在那里,所以我知道它有那么远,以防它由于某种原因在下一行崩溃)。然后当它到达下一行时,它会返回“Selected song: (null)”。

任何想法为什么?

编辑:两者都在 dealloc 中发布。

4

1 回答 1

0

查看您的界面文件,您似乎声明MPMediaItemCollection *selectedSong;了两次:/我不确定这是否是发布问题时的拼写错误,但这可能与它有关。您的崩溃很可能与selectedSong在您不期望的某个时候被释放有关,而错误的声明可能会导致这种情况。

于 2011-02-04T20:20:08.873 回答