2

のサブクラスがAVAudioPlayerあり、そのサブクラス内に現在のプレーヤーを停止するメソッドがあり、(理由については説明しません)audioPlayerDidFinishPlaying次のように手動で呼び出します。

// Handles stopping the player and calling audioPlayerDidFinishPlaying
- (void) stopPlayerForTimedRepeat {

    // Stop the player
    [self stop];

    // Manually call the audio player callback
    EditPlayListViewController *playlistController = [[EditPlayListViewController alloc] init];
    [playlistController audioPlayerDidFinishPlaying:self successfully:YES];
    [playlistController release];

}

ただし、audioPlayerDidFinishPlayingこのように手動で呼び出すと、元のすべての変数EditPlaylistViewControllerが範囲外になります。

元の変数のすべてに引き続きアクセスできるように、これを回避するにはどうすればよいですか?

4

2 に答える 2

2

audioPlayerDidFinishPlayingすべての変数が引き続きスコープ内にあるように、手動で呼び出さずにこれを行うためのより良い方法を見つけました。

// Handles stopping the player and calling audioPlayerDidFinishPlaying
- (void) stopPlayerForTimedRepeat {

    // Fast forward the call to the end, which will also call audioPlayerDidFinishPlaying
    [self setCurrentTime:[self duration]];

}
于 2012-06-09T06:38:18.563 に答える
0

EditPlayListViewController *playlistController = [[EditPlayListViewController alloc] init];メソッドを停止した後にメソッドで新しいオブジェクトを作成しているため、変数のスコープが失われます 。

.hファイルでプレーヤーを宣言してください(このようにして、メソッドEditPlayListViewController *playlistController;に割り当ててください( .viewDidLoadplaylistController = [[EditPlayListViewController alloc] init];

このようにメソッドを変更し、

- (void) stopPlayerForTimedRepeat
{
    // Stop the player
     [self stop];

    // Manually call the audio player callback
    [playlistController audioPlayerDidFinishPlaying:self successfully:YES];
    [playlistController release];

}

うまくいくといいのですが、うまくいかない場合は教えてください。

于 2012-06-09T14:12:18.167 に答える