3

我想顯示一個UICollectionView但我有加載圖像的問題。 AlAssetsLibrary不會返回到runloop。ALAssetsLibrary不返回runloop

我得到的輸出

2013-04-12 11:36:25.429 Filmriss[459:907] didReturnWithDefaultRepresentation 2013-04-12 11:36:25.431 Filmriss[459:907] didReturnWithDefaultRepresentation 2013-04-12 11:36:25.435 Filmriss[459:907] didReturnWithDefaultRepresentation 2013-04-12 11:36:25.438 Filmriss[459:907] cellForItemAtIndexPath
2013-04-12 11:36:25.450 Filmriss[459:907] cellForItemAtIndexPath
2013-04-12 11:36:25.456 Filmriss[459:907] cellForItemAtIndexPath

didReturnWithDefaultRepresentation方法每個圖像後調用。在這種方法中,嘗試重新加載收藏視圖,但只有在找到所有圖像後纔會重新加載。

繼承人我的代碼:

@implementation PhotoEngine 
-(void)startLookingForPhotosBetween:(NSDate*)startDate andEndDate:(NSDate*)endDate 
{ 
BOOL __block isValid = NO; 

NSMutableArray *representationArray = [NSMutableArray new]; 
ALAssetsLibrary *assetLibrary = [ALAssetsLibrary new]; 
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    if (group) { 
     [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
     [group enumerateAssetsUsingBlock: 
     ^(ALAsset *asset, NSUInteger index, BOOL *stop) 
     { 
      if (!asset && (index == NSNotFound)) 
      { 
       if ([self.delegate respondsToSelector:@selector(photoEngine:didFinishWithResults:)]) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         [self.delegate photoEngine:self didFinishWithResults:representationArray]; 
        }); 
       } 
      } 
      else { 
       ALAssetRepresentation *defaultRepresentation = [asset defaultRepresentation]; 

       NSDate *creationDate = [asset valueForProperty:ALAssetPropertyDate]; 
       if (
        ([startDate compare:creationDate] == NSOrderedAscending) && 
        ([endDate compare:creationDate] == NSOrderedDescending) 
        ) { 
        isValid = YES; 

       } 
       if(isValid) { 

        [representationArray addObject:defaultRepresentation.url]; 
        NSURL *url = defaultRepresentation.url; 
        if ([self.delegate respondsToSelector:@selector(photoEngine:didReturnWithDefaultRepresentation:)]) { 
         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
          [self.delegate photoEngine:self didReturnWithDefaultRepresentation:url]; 
         }); 
        } 

       } 
      } 
     }]; 
    } 
    // group == nil signals we are done iterating. 
    else { 
     dispatch_async(dispatch_get_main_queue(), ^{ 

     }); 
    } 
} 
          failureBlock:^(NSError *error) { 
           NSLog(@"error enumerating AssetLibrary groups %@\n", error); 
          }]; 

} 
@end 
// didReturnWithDefaultRepresentation this Method is in CollectionView 
-(void)photoEngine:(PhotoEngine*)photoEngine didReturnWithDefaultRepresentation:(NSURL *)defaultRepresentationURL 
{ 
NSLog(@"didReturnWithDefaultRepresentation"); 
[self.photoDataArray addObject:defaultRepresentationURL]; 
[self.collectionView reloadData]; 

} 

回答

0

首先,必須修復[self.collectionView reloadData];在主要thead。