我正在将新创建的视频文件保存在本地文档中。然后,我想使用“照片”框架将其复制到“照片库”中。

问题是,即使正在写出视频(并且我可以确认视频在那里并且可以观看),以下创建请求也始终返回nil:

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{

    // NSString filePath points to the newly-created file in Documents directory
    NSParameterAssert([[NSFileManager defaultManager] isReadableFileAtPath:filePath]);
    // path looks fine

    NSURL* url = [NSURL URLWithString:filePath];
    PHAssetChangeRequest* createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];

    // got back nil from creationRequestForAssetFromVideoAtFileURL, so we will assert out here
    NSParameterAssert(createAssetRequest);
}
completionHandler:^(BOOL success, NSError *error) {}];

最佳答案

毫不奇怪,URL是问题所在。 url = [NSURL URLWithString:filePath]不指向电影文件。如果通过以下方式获取(例如)url很好:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSArray *contents = [fileManager contentsOfDirectoryAtURL:documentsURL
                                       includingPropertiesForKeys:@[]
                                                          options:NSDirectoryEnumerationSkipsHiddenFiles
                                                            error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastPathComponent == 'movie.mov'"];
NSURL* url = nil;
for (NSURL *fileURL in [contents filteredArrayUsingPredicate:predicate]) {
    url = fileURL;
}

关于ios - 创建视频 Assets 时,PHAssetChangeRequest始终返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31527436/

10-14 21:11
查看更多