ios 5.0 的assetForURL 不适用于设备

Posted

技术标签:

【中文标题】ios 5.0 的assetForURL 不适用于设备【英文标题】:assetForURL with ios 5.0 doesn't work with device 【发布时间】:2011-10-21 10:24:36 【问题描述】:
- (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 下工作,但它们根本不能在设备下工作,它不会在断点处停止,NSLogs 也不起作用。使用模拟器一切正常。注意:CLAuthorizationStatus == kCLAuthorizationStatusAuthorized

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

ios5 开始,assetForURL 可以异步工作。确保你打电话

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

在主线程上。这最容易通过在主队列上使用 dispatch_async 来完成。

干杯,

亨德里克

【讨论】:

以上是关于ios 5.0 的assetForURL 不适用于设备的主要内容,如果未能解决你的问题,请参考以下文章

EXTJS 5.0:无限网格滚动不适用于商店中的 extraParams

Android 5.0 android:elevation 适用于 View,但不适用于 Button?

Android Studio 0.5.0 重建不适用于 Proguard

Phonegap 2.5.0 地理定位不适用于 android 4.0.4

在 Swift 1.2 中使用assetForURL

MonoTouch:从 ALAssetsLibrary.AssetForUrl 中获取图像