当我在设备上运行程序时,AssetsLibrary 没有获取保存在相机胶卷中的图像
Posted
技术标签:
【中文标题】当我在设备上运行程序时,AssetsLibrary 没有获取保存在相机胶卷中的图像【英文标题】:AssetsLibrary does not get images saved in the Camera roll when I run the program on the device 【发布时间】:2011-05-22 10:02:59 【问题描述】:我编写了一个简单的 ios 程序,通过使用 SDK4.2 中提供的“资产库”框架来获取保存在相机胶卷中的照片图像数量。
当我在 iPhone 模拟器上运行该程序时,该程序运行良好。 但是,当我在“真正的”iPhone 设备(带有 iOS 4.2.1 的 iPhone 3GS)上运行时,它没有检索到任何图像。
这个问题看起来和下面文章中讨论的问题一样: Assets Library Framework not working correctly on 4.0 and 4.2
所以,我添加了“dispatch_async(dispatch_get_main_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.");
];
如果你有什么想法可以解决,请告诉我?
【问题讨论】:
我终于找到了解决这个问题的方法: 【参考方案1】:我有 1 条更新:
为了得到错误码,我修改了 enumerateGroupsWithTypes 的 failureBlock 如下,然后又重现了这个症状。
然后,应用返回错误代码 -3311 (ALAssetsLibraryAccessUserDeniedError)。 但是在我的复现测试中,我并没有进行任何否认的操作。
err#=-3311 的可能原因是什么?
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:assetGroupEnumerator
failureBlock: ^(NSError *error)
NSLog(@"Failed");
resultMsg = [NSString stringWithFormat:@"Failed: code=%d", [error code]]; ];
【讨论】:
终于找到了解决这个问题的办法。我必须启用“定位服务”才能使这个程序运行良好。这是步骤; (1) 将上述应用程序安装到 iPhone 设备上。 (2) 启动 [设置] 并进入 [常规] > [位置服务] > [访问保存的照片时应该涉及位置服务,这很奇怪。也许它与照片上的地理标记信息有关。不管怎样,Apple 表示在使用 enumerateGroupsWithTypes:usingBlock:failureBlock:
时需要启用定位服务
特别注意事项
如果用户未启用定位服务(在设置 > 常规中),此方法将失败并返回错误 ALAssetsLibraryAccessGloballyDeniedError
。"
【讨论】:
以上是关于当我在设备上运行程序时,AssetsLibrary 没有获取保存在相机胶卷中的图像的主要内容,如果未能解决你的问题,请参考以下文章
应用程序在我的设备上运行,但当我将其发布到 Google Play 商店进行 Beta 测试时无法运行
使用 AssetsLibrary 框架 iPhone 访问库中的视频?