#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. Вот почему мое приложение зависало. Теперь он работает хорошо.