Ho tre file di pennini nel mio progetto, ognuno dei quali è guidato dalla sua stessa classe (file .h e .m). Ogni pennino presenta un design stilizzato con un'immagine di sfondo a schermo intero e alcune immagini di sovrapposizione che fungono da pulsanti. Ogni pulsante ha il proprio suono pulsante-clic e la maggior parte dei pulsanti su ciascun file pennino riprodurrà un video diverso per pulsante.
Per riprodurre i video, ognuno dei miei tre file .m ha un paio di metodi simili a questo:
-(IBAction) videoButtonClicked: (id)sender{
if([sender tag] == 1) {
AudioServicesPlaySystemSound (buttonClick1);
[self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 1" ofType:@"mov"]];
} else if ([sender tag] == 2) {
AudioServicesPlaySystemSound (buttonClick2);
[self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 2" ofType:@"mov"]];
} else if ([sender tag] == 3) {
AudioServicesPlaySystemSound (buttonClick3);
[self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 3" ofType:@"mov"]];
} else if ([sender tag] == 4) {
AudioServicesPlaySystemSound (buttonClick4);
[self loadMoviePlayer:[[NSBundle mainBundle] pathForResource:@"Video 4" ofType:@"mov"]];
}
}
- (void)loadMoviePlayer:(NSString*) movieURL
{
// Play movie from the bundle
NSURL *url = [NSURL fileURLWithPath:movieURL];
player = [[MPMoviePlayerViewController alloc]
initWithContentURL:url];
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(movieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
[self presentMoviePlayerViewControllerAnimated:player];
[player release];
}
Il mio codice funziona ora perché i video sono incorporati nella mia cartella delle risorse.
Tuttavia, insieme, i video sono troppo grandi per essere raggruppati con l'app e scaricati dall'App Store.
Quindi avrò l'app per scaricarli da un server, quindi voglio creare una classe di gestione video per tenere traccia di quali video sono stati scaricati. Penso che dovrei avere un'istanza dell'oggetto, ma come possono i miei tre controller parlare con l'unica istanza?
Sono abbastanza sicuro di avere una classe che carica il file .nib corretto , posso fare in modo che quell'istanza parli con la mia istanza di gestione video.
Ma dovrei essere sprecare inutilmente memoria caricando tutti e tre i pennini in una sola volta?