【发布时间】:2011-06-30 08:05:11
【问题描述】:
我有一个启用了位置服务的应用程序(通过设置等),我正在使用 ALAssetsLibrary 从我的设备读取所有照片。
它在 iPhone4 iOS 4.2.1 上完美运行,但相同的代码和相同的资产不能在任何 3gs 任何 iOS(从 4.0 到 4.2.1)上运行。
问题是它总是在 3gs 上检索一个无效的 CLLocation。
即使在同一张图片上(在两个设备上复制)在 iPhone4 上返回一个有效的 CLLocation,在 3gs 上它返回无效! 图片图像本身在两个设备上都有效,只有 CLLocation 无效。我没有任何崩溃,代码也没有进入任何无效块,除了无效的 CLLocation 数据之外,它都可以正常工作。
相同资产和相同代码以及相同iOS版本(4.2.1)的输出:
iPhone4: +/- 0.00m(速度 -1.00 mps / 路线 -1.00)@ 19/02/2011 01:59:28 格林威治标准时间
3gs: +/- 0.00m(速度 -1.00 mps / 路线 -1.00)@ 2011-02-19 01:20:35 +0000
(还要注意无效位置上的日期是当前时间)
我得到这样的 CLLocation:
CLLocation* location = [asset valueForProperty:ALAssetPropertyLocation];
CLLocationCoordinate2D coord = [location coordinate];
if ( !CLLocationCoordinate2DIsValid(coord) ) return;
在我的视图控制器 DidLoad 中调用的 ALAssetsLibrary 代码如下所示(完全标准):
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
if(result != NULL)
{
[self myFunction:result withIndex:index];
}
};
void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil)
{
numberOfAssets = [group numberOfAssets];
[group enumerateAssetsUsingBlock:assetEnumerator];
}
};
[library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:assetGroupEnumerator
failureBlock: ^(NSError *error) {
NSLog(@"Oh no!");
}];
最后一件事,在本机照片应用程序上,图片显示在 3gs 上的正确位置,因此他们必须在某个地方拥有该数据,它只是不以某种方式读取它!
我不完全确定这是一个设备(3gs)问题,通常它永远不会......
【问题讨论】:
-
你解决过这个问题吗?如果是,请发布带有正确信息的答案,因为我遇到了同样的问题。谢谢!
-
我什至没有在 iPhone 4 或 iPad 3rd gen 上看到 ALAssetPropertyLocation 元数据,这也是启用了定位服务(在相关应用程序和相机应用程序中)。我拍了照片,查看了元数据,EXIF 在那里,但其他的不多。
-
尝试将简化示例发布到 bugreport.apple.com。在这种情况下,它们通常很有帮助。
标签: iphone objective-c cllocation assetslibrary