Ошибка при записи видео против некоторых изображений Apple Live
Я заполняю ресурсы галереи в своем приложении. В моем приложении живые изображения Apple рассматриваются как видео. Я явно пишу видео против изображения Apple Live. Некоторые из моих живых изображений Apple правильно записаны в виде видео, в то время как я получаю ошибку для некоторых моих изображений. Описание ошибки NSError гласит: "операция не может быть завершена. [Ошибка какао -1].
Следующий метод возвращает ошибку для некоторых медиа-объектов: PHDSsetResourceManager's writeDataForAssetResource
Ниже приведен мой метод, который принимает массив идентификаторов Apple Live и мой массив пользовательских объектов в качестве параметров и выполняет обработку путем поиска активов по переданным идентификаторам Apple Live ID в массиве пользовательских объектов.
- (void)updateAssetsToVideoFromLivePhotos:(NSMutableArray*)array objectsArray:(NSMutableArray*) mediaObjectsArray withCompletionHandler:(void (^)(void))completionBlock {
PHFetchOptions *fetchOptions = [PHFetchOptions new];
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:array options:fetchOptions];
for (NSInteger i = 0; i < [fetchResult count]; i++) {
PHAsset *phAsset = [fetchResult objectAtIndex:i];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *assetID = phAsset.localIdentifier;
NSRange range = [assetID rangeOfString:@"/"];
if (range.location != NSNotFound) {
assetID = [assetID substringToIndex:range.location];
}
NSString *outputPath = [documentsDirectory stringByAppendingFormat:@"/%@.mp4", assetID];
BOOL videoExists = [[NSFileManager defaultManager] fileExistsAtPath:outputPath];
NSError * errorRef;
if (videoExists) {
[[NSFileManager defaultManager] removeItemAtPath:outputPath error:&errorRef];
}
NSURL *outputURL = [NSURL fileURLWithPath:outputPath];
NSArray *assetResources = [PHAssetResource assetResourcesForAsset:phAsset];
for (NSInteger j = 0; j < [assetResources count]; j++){
PHAssetResource* assetResource = [assetResources objectAtIndex:j];
if (assetResource.type == PHAssetResourceTypePairedVideo){
PHAssetResourceRequestOptions *requestOptions =[PHAssetResourceRequestOptions new];
[[PHAssetResourceManager defaultManager]
writeDataForAssetResource:assetResource
toFile:outputURL
options:requestOptions
completionHandler:^(NSError *error) {
if (!error){
for (NSInteger i = 0; i < [mediaObjectsArray count]; i++){
MyCustomObject *mediaObject = [mediaObjectsArray
objectAtIndex:i];
if ([mediaObject matchesAssetID:assetID]){
[mediaObject updateForAppleLivePhoto:
[outputURL absoluteString]];
break;
}
}
} else {
NSLog(@"%@",[error localizedDescription]);
}
}];
}
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"mediaUpdated" object:nil];
});
completionBlock();
}