带有ios 5.0的assetForURL不适用于设备

时间:2011-10-21 10:24:36

标签: ios5 alassetslibrary

- (void)thumbnail:(NSNumber *)index{

    __block NSNumber *number = [NSNumber numberWithInt:[index intValue]];

    ALAssetsLibrary *library = [ALAssetsLibrary sharedALAssetsLibrary];

ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
        CGImageRef iref = [myasset thumbnail];
        if (iref) {
        [delegate thumbnailDidLoad:[UIImage imageWithCGImage:iref] withIndex:number];
        }
     NSLog(@"RESSSSSSSSSSSSSSSSSSSSSSSSSSSSSULT");
};

    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        NSLog(@"Error, can't get image - %@",[myerror localizedDescription]);
    };
    NSString *mediaurl =  @"assets-library://asset/asset.JPG?id=5AF4118C-947D-4097-910E-47E19553039C&ext=JPG";

    NSURL *asseturl = [NSURL URLWithString:mediaurl];
    [library assetForURL:asseturl resultBlock:resultblock failureBlock:failureblock];
    NSLog(@"asseturl %@",asseturl);
}

这是我的代码,我的块有问题 - 它们在模拟器5.0下工作,但它们根本无法在设备下工作,它不会在断点处停止并且NSLog不起作用。使用模拟器都能正常工作。注意:CLAuthorizationStatus == kCLAuthorizationStatusAuthorized

2 个答案:

答案 0 :(得分:1)

确保整个功能 - (void)thumbnail:(NSNumber *)index...是从主线程执行的,或者您确定用户已授权您的应用使用位置服务。如果您在后台调用它并且您还没有授权,那么将永远不会提示用户进行批准,也不会调用结果或失败块。

答案 1 :(得分:0)

从iOS5开始,assetForURL工作异步。请务必致电

    [delegate thumbnailDidLoad:[UIImage imageWithCGImage:iref] withIndex:number];

在主线程上。通过在主队列上使用dispatch_async,这是最简单的方法。

干杯,

亨德里克