Это должно работать до тех пор, пока UIVideoAtPathIsCompatibleWithSavedPhotosAlbum () вернет true. Тем не менее, у меня была эта проблема раньше, и мне, кажется, повезло больше, создавая объект ALAssetsLibrary, а затем используя метод:
- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock
Я не пытался отредактировать это как универсальное или на 100% переносимое. Я только что взял код, который написал для сохранения видео, чтобы дать вам хорошую отправную точку для использования ALAssetLibrary вместо:
- (void) saveVideoFile:(NSString *)fullpathVideoFile completionTarget:(id)theCompletionTarget action:(SEL)theCompletionAction context:(id)theContext
{
writeFailed = NO;
completionTarget = theCompletionTarget;
completionAction = theCompletionAction;
completionContext = theContext;
// ALAssetsLibraryWriteVideoCompletionBlock
//
void (^completionBlock)(NSURL *, NSError *) = ^(NSURL *assetURL, NSError *error)
{
if ( error != nil )
{
writeFailed = YES;
}
writingToLibrary = NO;
[self notifyCompletionTarget];
};
// clean up from previous calls
//
if ( assetURL != nil )
{
[assetURL release];
assetURL = nil;
}
if ( assetFullPathName != nil )
{
[assetFullPathName release];
assetFullPathName = nil;
}
writingToLibrary = YES;
// make sure we have a good file
//
if ( [[NSFileManager defaultManager] fileExistsAtPath:fullpathVideoFile] == NO)
{
writingToLibrary = NO;
writeFailed = YES;
[self notifyCompletionTarget];
return;
}
// set assetURL for sending to the library
//
assetFullPathName = [[NSMutableString alloc] initWithCapacity:(NSUInteger)1024];
[assetFullPathName setString:fullpathVideoFile];
assetURL = [[NSURL alloc] initFileURLWithPath:assetFullPathName isDirectory:NO];
// Use possible alternative method if this method doesn't want to work
//
if ( [library videoAtPathIsCompatibleWithSavedPhotosAlbum:assetURL]==NO )
{
if ( UIVideoAtPathIsCompatibleWithSavedPhotosAlbum( assetFullPathName ) )
{
UISaveVideoAtPathToSavedPhotosAlbum( assetFullPathName, self, @selector(video:didFinishSavingWithError:contextInfo:), nil );
}
else
{
writingToLibrary = NO;
writeFailed = YES;
[self notifyCompletionTarget];
}
return;
}
// Write the video to the library
//
[library writeVideoAtPathToSavedPhotosAlbum:assetURL completionBlock:completionBlock];
}