iphone звонит и тогда, и тогда одновременно? - PullRequest
1 голос
/ 11 мая 2010

Мне нужно определить тип файла и затем выполнить для него определенное действие. похоже, для некоторых типов это работает нормально, однако смешиваются все типы мультимедиа, такие как видео и звуковые файлы. Я определяю тип файла следующим образом:

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

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

Я делаю это для различных типов файлов и просто определяю «else» для всех остальных. Вот проблема, хотя. IPhone называет их обоих. Вот что показывает журнал:

2010-05-11 18: 51: 12.421 Тест [5113: 207] Соответствует MP3

2010-05-11 18: 51: 12.449 Тест [5113: 207] Соответствует ELSE

Я никогда не видел ничего подобного раньше.

Это моя функция "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];
   }

и вот еще утверждение:

   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];

   }

Я не вижу причины, по которой это не сработает. В результате веб-представление и MediaPlayer переключают свой собственный проигрыватель, поэтому они перекрывают друг друга и воспроизводят звук / видео на расстоянии нескольких секунд друг от друга.

Буду признателен за любую помощь, и спасибо, что нашли время, чтобы прочитать мой код.

1 Ответ

4 голосов
/ 11 мая 2010

Разве вы по ошибке не сделали что-то вроде

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

В этом случае, если conditionA удовлетворено, а conditionB - нет, выполняется условие else, поскольку первое условие if заканчивается вторым if. Вы бы хотели

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

вместо этого. Остерегайтесь else if.

Кстати, вам не нужно и не следует сравнивать BOOL с YES.

 if(matchedMP3)

достаточно. Помните, if принимает внутри логическое выражение. Логическое значение - это логическое выражение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...