У меня есть 2 метода. Один метод начинает воспроизведение аудиофайла (.mp3), . Другой метод обновляет UIToolBar, чтобы показать кнопку (PLAY или PAUSE). Эти два метода вызываются в следующем порядке:Как принудительно выполнить один метод перед другим методом?
//Adds some UIBarButtonItems to a UIToolBar
[self togglePlayer];
//Uses AVAudioPlayer
[audioPlayer play];
TogglePlayer делает это:
-(void)togglePlayer
{
NSLog(@"Toggling Player");
NSArray *barButtonItems;
UIBarButtonItem *barButtonSpaceL;
UIBarButtonItem *barButtonSpaceR;
UIBarButtonItem *barButtonItemPlayer;
UIBarButtonItem *barButtonItemCancel;
UIBarButtonItem *barButtonItemLyrics;
UIBarButtonItem *barButtonItemTweet;
if([myToolbar.items count] > 0){
NSEnumerator *enumerator = [myToolbar.items objectEnumerator];
id object;
while ((object = [enumerator nextObject])) {
[object release];
object = nil;
}
}
if(!downloadInProgress){
barButtonSpaceL = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonSpaceR = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
if(thePlayerState == PLAYER_PLAYING){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"pauseIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pauseButtonPressed:)];
barButtonItemLyrics = [[UIBarButtonItem alloc] initWithTitle:@"Lyrics" style:UIBarButtonItemStyleBordered target:self action:@selector(switchPageLyrics:)];
barButtonItemTweet = [[UIBarButtonItem alloc] initWithTitle:@"Tweet This" style:UIBarButtonItemStyleBordered target:self action:@selector(tweetSong:)];
if(canTweet){
barButtonItems = [NSArray arrayWithObjects:barButtonItemTweet, barButtonSpaceR, barButtonItemPlayer, barButtonSpaceL, barButtonItemLyrics, nil];
}else{
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemLyrics, nil];
}
}else if(thePlayerState == PLAYER_PAUSED){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"playIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(playButtonPressed:)];
barButtonItemLyrics = [[UIBarButtonItem alloc] initWithTitle:@"Lyrics" style:UIBarButtonItemStyleBordered target:self action:@selector(switchPageLyrics:)];
barButtonItemTweet = [[UIBarButtonItem alloc] initWithTitle:@"Tweet This" style:UIBarButtonItemStyleBordered target:self action:@selector(tweetSong:)];
if(canTweet){
barButtonItems = [NSArray arrayWithObjects:barButtonItemTweet, barButtonSpaceR, barButtonItemPlayer, barButtonSpaceL, barButtonItemLyrics, nil];
}else{
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemLyrics, nil];
}
}else{
//PLAYER OFF
barButtonItems = [NSArray arrayWithObjects:barButtonSpaceL, nil];
}
[myToolbar setItems:barButtonItems];
}else{
barButtonSpaceL = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonSpaceR = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
barButtonItemCancel = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"VC1_DownloadCancel", @"") style:UIBarButtonItemStyleBordered target:self action:@selector(downloadCancelled:)];
if(thePlayerState == PLAYER_PLAYING){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"pauseIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pauseButtonPressed:)];
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemCancel, nil];
}else if(thePlayerState == PLAYER_PAUSED){
barButtonItemPlayer = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"playIcon.png"] style:UIBarButtonItemStylePlain target:self action:@selector(playButtonPressed:)];
barButtonItems = [NSArray arrayWithObjects:barButtonItemPlayer, barButtonSpaceR, barButtonItemCancel, nil];
}else{
//PLAYER OFF
barButtonItems = [NSArray arrayWithObjects:barButtonSpaceL, barButtonItemCancel, barButtonSpaceR, nil];
}
[myToolbar setItems:barButtonItems];
}
}
Я вызывать методы в указанном выше порядке, так что кнопка (пауза) будет показано, в то время, начинается песня. Но проблема в том, что песня начинает играть сначала, а UIToolBar остается неизменным довольно долго (от 2 до 5 секунд), пока кнопка не будет добавлена и не показана.
Я хочу, чтобы кнопка отображалась одновременно с началом воспроизведения песни (то есть без задержки). Есть какой-либо способ сделать это?
Священные утечки памяти, Бэтмен! У вас '+ alloc''с целая пучка кнопок, но никогда не' -release' их. –