Skip to content

Instantly share code, notes, and snippets.

@mr-rock
Created March 23, 2011 10:13
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mr-rock/882896 to your computer and use it in GitHub Desktop.
Save mr-rock/882896 to your computer and use it in GitHub Desktop.
- (void)scan {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ALAssetsGroupType sources = ALAssetsGroupLibrary | ALAssetsGroupSavedPhotos;
NSMutableArray *tags = [[NSMutableArray alloc] init];
ALAssetsGroupEnumerationResultsBlock assetsEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
if (result) {
if ([[result valueForProperty:ALAssetPropertyType] isEqual:ALAssetTypePhoto]) {
NSDictionary *metadata = [[result defaultRepresentation] metadata];
NSDictionary *iptc = [metadata objectForKey:(id)kCGImagePropertyIPTCDictionary];
NSArray *keys = [iptc objectForKey:(id)kCGImagePropertyIPTCKeywords];
NSURL *path = [[result defaultRepresentation] url];
if (keys) {
for (id key in keys)
if (![tags containsObject:key]) {
[tags addObject:key];
[keywords addObject:[[[KeywordInfoModel alloc] initWithSymbol:key andRelatedKeys:keys] autorelease]];
}
if (![paths containsObject:path]) {
[paths addObject:path];
[photos addObject:[[[PhotoInfoModel alloc] initWithURL:path andKeywords:keys] autorelease]];
}
}
}
}
[pool release];
};
ALAssetsLibraryGroupsEnumerationResultsBlock groupEnumerator = ^(ALAssetsGroup *group, BOOL *stop){
if (group)
[group enumerateAssetsUsingBlock:assetsEnumerator];
else
[self doAfterScanning];
};
ALAssetsLibraryAccessFailureBlock errorBlock = ^(NSError *error){
NSLog(@"Failure");
};
[self performSelectorOnMainThread:@selector(doBeforeScanning) withObject:nil waitUntilDone:YES];
[library enumerateGroupsWithTypes:sources usingBlock:groupEnumerator failureBlock:errorBlock];
[pool release];
}
@alloy
Copy link

alloy commented Mar 23, 2011

You can run [group enumerateAssetsUsingBlock:assetsEnumerator] on another thread. I think that's where you’re really blocking, because [library enumerateGroupsWithTypes:sources usingBlock:groupEnumerator failureBlock:errorBlock] is done async for me. You also seem to have an unused NSAutoreleasePool.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment