3
我真的迷路了。 爲什麼我每次得到NSLog兩次UIImage
?assetsLibrary一個簡單的錯誤?
//------ get the images from the camera roll ----------
assets=[[NSMutableArray alloc]init];
NSMutableArray *cameraRollPictures=[[NSMutableArray alloc]init];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
NSInteger numberOfAssets = [group numberOfAssets];
NSLog(@"NUM OF IMAGES:%d",numberOfAssets);
if (numberOfAssets > 0)
{
for (int i = 0; i <= numberOfAssets-1; i++)
{
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:i] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]];
[assets addObject:thumbnail];
NSLog(@"theObject!!!! -- (%d) %@",i,thumbnail);
//******* for each i its here twice !! ********
}];
}
}
這似乎並不罕見,因爲您可能多次爲每個i進行枚舉。換句話說,如果你的'enumerateAssetsAtIndexes'方法爲每個i調用兩次(在你的外層循環中),那麼當然你會爲每個i得到多個NSLog()。 – Jeremy 2013-02-26 19:08:25
@Jeremy:這就是我首先想到的,但是內部的'enumerateAssetsAtIndexes'被調用的索引集只包含單個索引'i',因此每個資產只枚舉一次。 – 2013-02-26 19:13:23
我想我會同意如果我保證每個索引只調用一次usingBlock。 Apple文檔提到(關於usingBlock:_要使用indexSet中的索引來使用組中的每個資源的塊。這可以採用幾種方法,但從邏輯上看,它似乎會觸發每個資產都會導致他/她所描述的行爲。 – Jeremy 2013-02-26 19:23:54