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は「Selectedsong:」のようなものを返します。次にNSLogは「Test」を返します(私はそこに置いたので、何らかの理由で次の行でクラッシュした場合に備えて、そこまで進んだことがわかります)。次に、次の行に到達すると、「選択された曲:( null)」が返されます。

なぜ何かアイデアはありますか?

編集:両方ともdeallocでリリースされます。

4

1 に答える 1

0

インターフェイス ファイルを見ると、2 回宣言しているように見えますMPMediaItemCollection *selectedSong;:/ これが質問の投稿のタイプミスであったかどうかはわかりませんが、何か関係がある可能性があります。クラッシュはselectedSong、予期しない時点でリリースされたことに関連している可能性が高く、不適切な宣言が原因である可能性があります。

于 2011-02-04T20:20:08.873 に答える