2010-05-11 7 views
1

J'ai besoin de déterminer quel type de fichier est un fichier et ensuite effectuer une certaine action pour cela. Cela semble fonctionner correctement pour certains types, mais tous les types de médias tels que les vidéos et les fichiers audio sont mélangés. Je détermine le type de fichier en faisant ceci:iphone appelle à la fois si et en même temps?

BOOL matchedMP3 = ([[rowValue pathExtension] isEqualToString:@"mp3"]); 

    if (matchedMP3 == YES) 
    { 
    NSLog(@"Matched MP3"); 
      } 

Je fais cela pour divers types de fichiers et de définir simplement un « autre » pour tous les autres. Voici le problème cependant. L'iPhone les appelle tous les deux. Voici ce que le journal révèle:

2010-05-11 18: 51: 12,421 test [5113: 207] Assorti MP3

2010-05-11 18: 51: 12,449 test [5113: 207] ELSE

Je n'avais jamais rien vu de tel auparavant.

Ceci est ma fonction "matchedMP3":

BOOL matchedMP3 = ([[rowValue pathExtension] isEqualToString:@"mp3"]); 
    if (matchedMP3 == YES) 
    { 
    NSLog(@"Matched MP3"); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSFileManager *manager = [NSFileManager defaultManager]; 
    self.directoryContent = [manager directoryContentsAtPath:documentsDirectory]; 

    NSString *errorMessage = [documentsDirectory stringByAppendingString:@"/"]; 

    NSString *urlAddress = [errorMessage stringByAppendingString:rowValue]; 

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:urlAddress]]; 

    moviePlayer.movieControlMode = MPMovieControlModeDefault; 

    moviePlayer.backgroundColor = [UIColor blackColor]; 

    [moviePlayer play]; 
    } 

et est ici l'instruction else:

else { 
    NSLog(@"Matched ELSE"); 
    [[NSUserDefaults standardUserDefaults] setObject:rowValue forKey:@"rowValue"]; 

    NSString*rowValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"rowValue"]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSFileManager *manager = [NSFileManager defaultManager]; 
    self.directoryContent = [manager directoryContentsAtPath:documentsDirectory]; 

    NSString *errorMessage = [documentsDirectory stringByAppendingString:@"/"]; 

    NSString *urlAddress = [errorMessage stringByAppendingString:rowValue]; 

    webViewHeader.prompt = rowValue; 

    [documentViewer setDelegate:self]; 

    NSString *encodedString = [urlAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

    //Create a URL object. 
    NSURL *url = [NSURL URLWithString:encodedString]; 

    //URL Requst Object 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    //Load the request in the UIWebView. 
    [documentViewer loadRequest:requestObj]; 

    [navigationController pushViewController:webView animated:YES]; 

    } 

Je ne vois pas une raison pour laquelle cela ne fonctionnerait pas. Ce qui se passe, c'est que WebView et MediaPlayer basculent entre eux, de sorte qu'ils se chevauchent et jouent leur son/vidéo à quelques secondes l'un de l'autre.

Toute aide serait appréciée & merci de prendre le temps de lire mon code.

+1

Une chance que dans le cas MP3, il appelle la fonction récursivement, directement ou indirectement? –

+0

Ou votre test appelle-t-il simplement la fonction deux fois? –

+0

Semble impossible :). La seule chose à laquelle je puisse arriver est que, êtes-vous sûr que vous n'avez pas = au lieu de == quelque part? J'ai eu ceci une fois ... si (x = YES) passerait bien sans aucun avertissement ... – texmex5

Répondre

4

Est-ce que vous faites par erreur pas quelque chose comme

if(conditionA) 
    { 
    ... 
    } 
    if(conditionB) 
    { 
    ... 
    } 
    else 
    { 
    .... 
    } 

Dans ce cas, si conditionA est satisfait, mais conditionB n'est pas, la clause else est exécutée, parce que la première si l'article se termine à la deuxième si. Vous voulez

if(conditionA) 
    { 
    ... 
    } 
    else if(conditionB) 
    { 
    ... 
    } 
    else 
    { 
    .... 
    } 

à la place. Méfiez-vous des else if. Par ailleurs, vous n'avez pas à et ne devez pas comparer BOOL par rapport à YES.

if(matchedMP3) 

est suffisant. Rappelez-vous, if accepte une expression booléenne à l'intérieur. Une valeur booléenne est une expression booléenne!

+0

Vous avez raison, comment pourrais-je avoir raté ça? Merci beaucoup de m'avoir aidé :) – Pripyat

+0

Comment pourriez-vous avoir manqué cela? C'est une erreur commune. Nous l'avons tous fait. – JeremyP

Questions connexes