我正在从用户照片库中选择一个视频,而不是将视频保存在用户文档文件夹中以便能够播放视频,即使用户从他的照片库中删除了该视频也是如此。此文件的URL存储在Core Data中。 一切正常,直到下次我运行App。不知何故,似乎URL不再有效,这很奇怪,因为我能够在[AVPlayer playerWithURL:videoURL]失败时删除视频文件。 以下是我选择视频网址的方法:
- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
NSURL* videoURL = info[UIImagePickerControllerMediaURL];}
这就是我保存视频的方式:
+ (NSURL*) saveVideoInDocumentsFolder:(NSURL*)videoURL name:(NSString*)name {
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* pathComponent = [NSString stringWithFormat:@"/%@.%@", name, [videoURL pathExtension]];
NSString* path = [documentsDirectory stringByAppendingPathComponent:pathComponent];
NSError* error = nil;
NSData* videoData = [NSData dataWithContentsOfURL:videoURL options:0 error:&error];
if (error)
return nil;
BOOL success = [videoData writeToFile:path options:NSDataWritingAtomic error:&error];
if (success)
return [NSURL fileURLWithPath:path];
return nil;}
这是我播放视频的方式:
AVPlayer* player = [AVPlayer playerWithURL:videoURL]; // <- AFTER I RESTART THE APP THIS METHOD ALWAYS RETURNS nil!!
AVPlayerViewController* viewController = [[AVPlayerViewController alloc] init];
[self presentViewController:viewController animated:YES completion:nil];
viewController.player = player;
[player play];
非常感谢提前!
答案 0 :(得分:0)
此文件的URL存储在Core Data
中
这就是问题所在。每次运行应用程序时,文档目录URL都会更改(因为您是沙箱),因此第二次无效。永远不要永远不会在iOS中保存绝对文件URL!
答案 1 :(得分:0)
当关闭并打开应用程序时,你需要在路径目录中占用时间,因为当应用程序关闭它时会删除documentDirectory,因此你必须再次使用它,如果你想获取你的视频文件,那么保存文件名称该视频到首选项或coreData然后通过附加此视频名称文件获取documentDirectory路径,您将获得您的视频。
看看: - (代码很快你可以很容易地将它转换为目标c)
让fileName =“recording.mp4”
让tempPath = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory,FileManager.SearchPathDomainMask.userDomainMask,true)
将tempDocumentsDirectory:AnyObject = tempPath [0]设为AnyObject
让tempDataPath = tempDocumentsDirectory.appendingPathComponent(fileName)as String as String
您将保存优先级或coreData的文件名
当您关闭并打开应用程序时,只需检查您是否有优先保存文件名或核心数据,如果是,则通过附加documentsDirectory来获取它,您将获得视频