打破照片 ALAssetsLibrary 的迭代

Posted

技术标签:

【中文标题】打破照片 ALAssetsLibrary 的迭代【英文标题】:break iteration of photos ALAssetsLibrary 【发布时间】:2013-04-01 10:12:17 【问题描述】:

如何通过布尔集突破 ALAssetsLibrary enumerateAssets 方法的枚举。我可以跳出循环吗?

代码:

[self.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) 
    @try 
        if(group != nil) 
            @autoreleasepool 
                    int newNumberOfPhotos = [group numberOfAssets];
                    if (self.numberOfPhotosInSavedPhotos < newNumberOfPhotos) 
                        //only new photos

                        NSRange range = NSMakeRange(self.numberOfPhotosInSavedPhotos, newNumberOfPhotos-self.numberOfPhotosInSavedPhotos);
                        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
                        [group enumerateAssetsAtIndexes:indexSet options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) 
                            @autoreleasepool 
                               if(someCondition)  
 //get out of the enumeration block (that is, exit the method) or go to complete block
                                

                                NSString *assetType = [result valueForProperty:ALAssetPropertyType];
                            
                         ];
                        
            
         else 
            //enumeration ended

        

    
    @catch (NSException *e) 
        NSLog(@"exception streaming: %@", [e description]);
    
failureBlock:^(NSError *error)
    NSLog(@"Error retrieving albums stream: %@", [error description]);
    if (error.code==-3312  || error.code==-3311) 
    
];

【问题讨论】:

你能不能!更具体地说,您在哪里遇到困难并需要帮助?贴出相关代码有助于理解你的问题。 【参考方案1】:

要停止资产枚举,只需在枚举块中设置*stop = YES

如果要停止外部和内部枚举,请为停止变量使用不同的名称并将两者都设置为YES

[self.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *outerStop) 
    ...
    [group enumerateAssetsAtIndexes:indexSet options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *innerStop) 
         if (someCondition) 
             *innerStop = YES;
             *outerStop = YES;
          else 
             // process asset
         
     
 

备注:如果你的循环中没有编程错误,@try/@catch 块通常是不必要的。

您对“新照片”的检查看起来很可疑,因为每个组中的资产数量与相同的数字self.numberOfPhotosInSavedPhotos 进行比较,也许您应该再次检查该部分。

【讨论】:

以上是关于打破照片 ALAssetsLibrary 的迭代的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 使用 AlAssetsLibrary 与您的应用程序自动同步照片

从 ALAssetsLibrary 获取所有照片

将照片应用程序前景化时更新 ALAssetsLibrary 的正确方法是啥?

尝试使用 ALAssetsLibrary 检索一组照片

如何使用 ALAssetsLibrary 访问照片而不在 iOS5 中请求位置访问?

ALAssetsLibrary 的问题