作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码查询资源库
ALAssetsLibrary *assetsLibrary = [self defaultAssetsLibrary];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSMutableArray *tmpAssets = [@[] mutableCopy];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if(result)
{
[tmpAssets addObject:result];
}
}];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
finished([[tmpAssets sortedArrayUsingDescriptors:@[sort]] mutableCopy]);
} failureBlock:^(NSError *error) {
finished(@[]);
NSLog(@"Error loading images %@", error);
}];
但是似乎我没有得到所有的 Assets ,如果我从外部源向 iPhone 添加图像,这些图像不会显示在从上述代码收到的 Assets 列表中……我得到的似乎是其他一切。我怀疑这可能是框架的限制,但当我使用 instagram 时,我注意到我的应用程序中丢失的照片是可见的......我如何获得每种类型的 Assets “ALAssetsGroupAll”还不够?
最佳答案
问题是您不了解 enumerateAssetsUsingBlock:
的工作原理。 它是异步的。
为了明白我的意思,让我用一些数字来划分你的代码:
// (1)
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
// (2)
if(result)
{
[tmpAssets addObject:result];
}
}];
// (3)
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
finished([[tmpAssets sortedArrayUsingDescriptors:@[sort]] mutableCopy]);
问题是 3 在 2 之前执行。因此 tmpAssets
中还没有任何内容。
那么你应该怎么做呢?好吧,这个方法(以及其他类似工作的 ALAssets 方法)以一种非常奇怪和特殊的方式运行:他们调用他们的 block 一次,带有一个 nil 参数。 (你似乎已经意识到这一点,因为你正在做一个 nil 测试;但你还没有理解这意味着什么。)你的工作是测试一个 nil 参数。如果参数为 nil,这是最后的额外调用,现在您可以进行任何清理。所以,像这样:
// (1)
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
// (2)
if(result)
{
[tmpAssets addObject:result];
}
else
// (3) // aha, finished, this is the extra time through
{
// NOW do something with tmpAssets!
}
}];
关于ios - AssetLibrary 不返回所有带有 "ALAssetsGroupAll"的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760111/
我正在使用以下代码查询资源库 ALAssetsLibrary *assetsLibrary = [self defaultAssetsLibrary]; [assetsLibrary enumerat
我是一名优秀的程序员,十分优秀!