[英]break iteration of photos ALAssetsLibrary
如何使用布爾集突破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) {
}
}];
要停止資產枚舉,只需在枚舉塊中設置*stop = YES
。
如果要同時停止外部枚舉和內部枚舉,請對stop變量使用不同的名稱,並將兩者都設置為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
,也許您應該再次檢查該部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.