Не показывает видео в симуляторе iPhone

#iphone #xcode

#iPhone #xcode

Вопрос:

У меня есть видеофайлы формата .m4v в папке ~/Library/Application Support/iphone simulator/4.3.2/Applications/ApplicationGUID/Documents . Но мое приложение вылетает при запуске. И в NSLog он показывает нулевой путь к файлу.

У меня есть следующий код в applicationDidFinishLaunching:(UIApplication *)application

 NSString  *filePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/Sample_ipod.m4v"]];
NSString  *videoFilepath = [[NSBundle mainBundle] pathForResource:@"VID"  ofType:@"m4v"];
NSLog(@"Filepath is: %@", videoFilepath);

UISaveVideoAtPathToSavedPhotosAlbum(filePath, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
imagePickerController.delegate = self;
imagePickerController.sourceType = 
UIImagePickerControllerSourceTypePhotoLibrary;

imagePickerController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];    
[window addSubview:imagePickerController.view];
  

Ответ №1:

Убедитесь, что файл at filePath существует … возможно, вы неправильно указали путь, или файл удаляется из вашего пакета, что-то в этом роде.

Используется NSFileManager для проверки существования.

Если это не исправит проблему, пожалуйста, опубликуйте подробную информацию о сбое. В какой строке кода происходит сбой, какое сообщение оно выдает?

Ответ №2:

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

Есть лучшие способы получить папку с документами, например:

 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"Sample_ipod.m4v"];
  

Использование [[NSBundle mainBundle] pathForResource:...] не приведет к поиску файла в документах, где, как вы говорите, находятся файлы. Вместо этого используйте код, который я показываю выше для пути к файлу.

Комментарии:

1. Спасибо, Пол. Я обновил свой код, как вы сказали. Но он все равно разбился. Выдает следующую ошибку2011-10-12 11 :19:29.258 ios видео по электронной почте [46729:b303] Путь к файлу: (null) 2011-10-12 11:19:32.219 ios видео по электронной почте [46729:b303] *** Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘ [NSInvocationinvocationwithmethod Signature:]: аргумент подписи метода не может быть равен нулю ‘

2. Хорошо. Теперь я могу получить путь к файлу. Я думаю, ему не нравится эта строка: UISaveVideoAtPathToSavedPhotosAlbum(путь к файлу, self, @selector(video:didFinishSavingWithError:contextInfo:), ноль);

3. 2011-10-12 11:36:28.323 видео по электронной почте ios[46885:b303] Путь к файлу: /Users/jonathanchen/Library/Поддержка приложений / Симулятор iPhone/4.3.2/Приложения/44B36E70-3EAE-4275-BA15-55B7E16AA25F/Documents/sample_ipod.m4v 2011-10-12 11:36:29.671 видео по электронной почте ios[46885:b303] *** Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘ [NSInvocation invocationwithmetodsignature:]: аргумент подписи метода не может быть равен нулю’

4. В файле main.m он выдает «Поток 1: принятый программой сигнал: SIGABRT»

Ответ №3:

Хорошо. Я смог это понять. Я не реализовал метод (видео: didFinishSavingWithError:contextInfo. Вот почему мое приложение зависало. Теперь он работает хорошо.