gpt4 book ai didi

objective-c - AssetForURL 返回 nil

转载 作者:太空狗 更新时间:2023-10-30 03:45:54 26 4
gpt4 key购买 nike

我正在尝试使用 AssetForURL 方法,但它返回 nil。

这是我正在使用的代码:

-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
{
__block BOOL albumWasFound = NO;

//search all photo albums in the library
[self enumerateGroupsWithTypes:ALAssetsGroupAlbum
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

//compare the names of the albums
if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {

//target album is found
albumWasFound = YES;

//get a hold of the photo's asset instance
[self assetForURL: assetURL
resultBlock:^(ALAsset *asset) {
//add photo to the target album
[group addAsset: asset];
//run the completion block
completionBlock(nil);

} failureBlock: completionBlock];

//album was found, bail out of the method
return;
}

if (group==nil && albumWasFound==NO) {
//photo albums are over, target album does not exist, thus create it

__weak ALAssetsLibrary* weakSelf = self;

//create new assets album
[self addAssetsGroupAlbumWithName:albumName
resultBlock:^(ALAssetsGroup *group) {

//get the photo's instance
[weakSelf assetForURL: assetURL
resultBlock:^(ALAsset *asset) {

//add photo to the newly created album
[group addAsset: asset];

//call the completion block
completionBlock(nil);

} failureBlock: completionBlock];

} failureBlock: completionBlock];

//should be the last iteration anyway, but just in case
return;
}

} failureBlock: completionBlock];

}

我给它的网址是:

    file://localhost/private/var/mobile/Applications/6630FBD3-1212-4ED0-BC3B-0C23AEEFB267/tmp/capture-T0x1d56e310.tmp.N3SZXy/capturedvideo.MOV

我从相机委托(delegate)方法中获取 URL:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

NSLog(@"%@",[info objectForKey:UIImagePickerControllerMediaURL]);

[library addAssetURL:[info objectForKey:UIImagePickerControllerMediaURL] toAlbum:@"Compedia videos" withCompletionBlock:^(NSError *error) {
if (error!=nil) {
NSLog(@"Big error: %@", [error description]);
}
}];

}

有什么想法吗?

最佳答案

您确定可以访问资源库吗?不要忘记检查访问状态

ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
if (status == ALAuthorizationStatusNotDetermined) {
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[ALAssetsLibrary authorizationStatus];
__block BOOL accessChecked = NO; /// *stop is not respected immediately
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (accessChecked) return ;
*stop = YES;
accessChecked = YES;
} failureBlock:^(NSError *error){
}];
}
else {
BOOL granted = status == ALAuthorizationStatusAuthorized;
}

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

Description Invokes a given block passing as a parameter each of theasset groups that match the given asset group type. The results arepassed one by one to the caller by executing the enumeration block.This method is asynchronous. When groups are enumerated, the user maybe asked to confirm the application's access to the data; the method,though, returns immediately. You should perform whatever work you wantwith the assets in enumerationBlock.

If the user denies access to theapplication, or if no application is allowed to access the data, thefailureBlock is called.

关于objective-c - AssetForURL 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com