Search code examples
iphoneasynchronousphotosalassetslibrary

Iphone: unable to show photos using AlAssetsLibrary


I currently sending ipa to friends for testing. Funny thing is, one of my tester able view her photos stored on her phone which was running IOS 5 using iPhone 4.

Another 2 testers: one has iPhone 4 (IOS 4.3.3) , and iPhone 3GS (IOS 5.0.1) both of them can't see photos stored on their phone.

These are the code I have used:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if(result != NULL) {
        //NSLog(@"See Asset: %@", @"ggg");
        [assets addObject:result];

    }
};

NSLog(@"location = %i      length = %i ", range->location, range->length );

void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) =  ^(ALAssetsGroup *group, BOOL *stop) {
    if(group != nil) {

        NSRange  *datarange = malloc(sizeof(NSRange));

        range->total = [group numberOfAssets];
        datarange->location = [group numberOfAssets] - range->location - range->length;
        datarange->length = range->length;
        NSLog(@" total = %i", range->total);

        int location = [group numberOfAssets] - range->location - range->length;

        if (location < 0)
        {
            datarange->location = 0;
            datarange->length = [group numberOfAssets] - range->location;
        }

        NSIndexSet *indexset = [ [NSIndexSet alloc] initWithIndexesInRange:*datarange];

        [group enumerateAssetsAtIndexes:indexset options:NULL
                             usingBlock:assetEnumerator];

        [indexset release];
        free(datarange);

        [self loadAssetToScrollView:assets]; 

    }

};    

    [assets release];

    assets = [[NSMutableArray alloc] init];


    [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
                           usingBlock:assetGroupEnumerator
                         failureBlock: ^(NSError *error) {
                             NSLog(@"Failure");
                         }];

    [library release];

I saw somebody say about asynchronous thing in some other threads but don't know is it the case. He say put dispatch_async in the enumerate group block.

Does anyone know what is wrong.

Additionally, one of tester with iOS 4.3.3 can show his photos after enabling location services under General->Setting. Why we have to enable it? Can we enabled it on code since it will be quite disturbing to the user who using our application.


Solution

  • Yes, it is incredibly frustrating, but that is how it is, and you cannot enable location services in code (that is a good thing though).