iOS中的资产库问题 - 5

时间:2012-06-13 09:26:34

标签: iphone objective-c ios5 uiimagepickercontroller alassetslibrary

我正在使用资产库从url获取图片,我的代码是

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset){     
    ALAssetRepresentation *rep = [myasset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    UIImage *largeimage;

    if (iref) {
        largeimage = [UIImage imageWithCGImage:iref];
    }

    [self customeButtonCreated:self];

    NSData* thumbImageData = [[NSData alloc] initWithContentsOfFile:imagePath];
    btn1.frame = CGRectMake(x, y, WIDTH, HEIGHT);
    [btn1 setTag:tag];

    //[media_id addObject:[allKey objectAtIndex:0]];     
    [btnURl addObject:imagePath];

    UIImage *tempImage = [[UIImage alloc]initWithData:thumbImageData];
    [btn1 setImage:largeimage forState:UIControlStateNormal];
    btn1.imageView.contentMode = UIViewContentModeScaleAspectFit;           
    [tempImage release];

    [newView addSubview:btn1];
    [btn1 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
    [thumbImageData release];

    imgcount++;

    NSLog(@"Iamge count ---%d",imgcount);
    tag++;
};

ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror){
    NSLog(@"Cannot get image - %@",[myerror localizedDescription]);
};


if ([seprateArr count] == 2) {
    NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"assets-library://asset/asset.JPG?id=%@&ext=%@",[seprateArr objectAtIndex:0],[seprateArr objectAtIndex:1]]];
    ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
    [assetslibrary assetForURL:url resultBlock:resultblock failureBlock:failureblock];
}

它在ios - 4或以下工作正常,但在ios - 5中它没有进入阻止并显示错误

  

无法获取图片 - 全局拒绝访问

任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

这适用于ios 4.0和ios 5。

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSString *photoName;
NSString *photoUrl;

 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
    {
        if(result != NULL) 
        {
            NSArray *arrKeys = [[result valueForProperty:ALAssetPropertyURLs]allKeys];             
            if([[result valueForProperty:ALAssetPropertyType]isEqualToString:ALAssetTypePhoto])
            {
                if([[UIDevice currentDevice] systemVersion]>=5.0))
                {
                    photoName = [[result defaultRepresentation]UTI];

                }
                else
                {
                    photoName = [[result defaultRepresentation]filename];

                }
                //Your code here
                photoUrl = [[result valueForProperty:ALAssetPropertyURLs]objectForKey:[arrKeys objectAtIndex:0]];

            }
        }
    };

    void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) 
    {
        if(group != nil) 
        {
            [group enumerateAssetsUsingBlock:assetEnumerator];
        }
    };
    [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:^(NSError *error){
        NSLog(@"%@",error);
    }];

    [pool release];