Objective c 在设备上运行程序时,AssetsLibrary不会获取保存在相机卷中的图像

Objective c 在设备上运行程序时,AssetsLibrary不会获取保存在相机卷中的图像,objective-c,ios4,assetslibrary,Objective C,Ios4,Assetslibrary,我编写了一个简单的iOS程序,通过使用SDK4.2中提供的“资产库”框架来获取保存在相机卷中的照片图像数量 当我在iPhone模拟器上运行该程序时,它运行得很好。 但是,当我在“真正”的iPhone设备(iPhone3GS和iOS4.2.1)上运行时,它没有检索到任何图像 此问题与下面文章中讨论的问题类似: 因此,我添加了“dispatch\u async(dispatch\u get\u main\u queue()…”函数,如下所示,但我无法解决这个问题 - (void)viewDidLo

我编写了一个简单的iOS程序,通过使用SDK4.2中提供的“资产库”框架来获取保存在相机卷中的照片图像数量

当我在iPhone模拟器上运行该程序时,它运行得很好。 但是,当我在“真正”的iPhone设备(iPhone3GS和iOS4.2.1)上运行时,它没有检索到任何图像

此问题与下面文章中讨论的问题类似:

因此,我添加了“dispatch\u async(dispatch\u get\u main\u queue()…”函数,如下所示,但我无法解决这个问题

- (void)viewDidLoad {
    [super viewDidLoad];

    NSMutableArray assets = [[NSMutableArray array] retain]; // Prepare array to have retrieved images by Assets Library.

    void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *asset, NSUInteger index, BOOL *stop) {
        if(asset != NULL) {
            [assets addObject:asset]; 
            dispatch_async(dispatch_get_main_queue(), ^{

                // show number of retrieved images saved in the Camera role.
                // The [assets count] returns always 0 when I run this program on iPhone device although it worked OK on the simulator.
                NSLog(@"%i", [assets count]);
            });
        }
    };

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) {
        if(group != nil) {
            [group enumerateAssetsUsingBlock:assetEnumerator];
        }
    };

    // Create instance of the Assets Library.
    ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

    [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos // Retrieve the images saved in the Camera role.
                           usingBlock:assetGroupEnumerator
                         failureBlock: ^(NSError *error) {
                             NSLog(@"Failed.");
                         }];
}
你能告诉我你有什么办法解决这个问题吗?

我有一个更新:

为了获得错误代码,我修改了enumerateGroupsWithTypes的failureBlock,如下所示,然后再次复制症状

然后,应用程序返回错误代码-3311(AlasSetLibraryAccessUserDeniedError)。 然而,我没有任何操作来否认,而我的复制测试

错误=3311的可能原因是什么


奇怪的是,在访问保存的照片时竟然会涉及到位置服务。这可能与照片上的地理标记信息有关。无论如何,苹果公司表示,在使用时需要启用位置服务

特殊注意事项
如果用户未启用位置服务(在设置>常规中),此方法将失败,并出现错误
AlassetLibraryAccessGloballyDederRor
。“

最终我找到了此问题的解决方案:最终我找到了此问题的解决方案。我必须启用“位置服务”才能使此程序正常工作。以下是步骤;(1)将上述应用程序安装到iPhone设备上。(2)启动[设置]并转到[常规]>[位置服务]>[]将其“打开”。(3)启动我的应用程序以运行它。然后我的应用程序按照我的预期从照相机滚动中检索照片。希望这有帮助,是的,它要求位置服务,但行为很奇怪,为什么图像检索需要位置服务。有没有办法不打开我的位置服务并且不被要求提供位置服务当我在我的应用程序中获取照片时???@chotachetan照片具有关联的位置数据。通过此机制访问照片允许您也访问位置数据,因此用户必须允许您的应用程序执行此操作。
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
                       usingBlock:assetGroupEnumerator
                     failureBlock: ^(NSError *error) {
                         NSLog(@"Failed");
        resultMsg = [NSString stringWithFormat:@"Failed: code=%d", [error code]];                     }];