0

私のコードでは、写真ライブラリからすべての写真を取得して配列に保存しようとしました。ビデオも取得して、同じ配列に保存したいと思います。上記の要件のためにこのコードを変更する方法を教えてください。私は初心者なので、何ヶ月もこれに苦労してきました。

-(IBAction)getAllPictures: (id) sender
{
    imageArray=[[NSArray alloc] init];
    mutableArray =[[NSMutableArray alloc]init];
    NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init];

    library = [[ALAssetsLibrary alloc] init];

    void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
    {
        if(result != nil)
        {
            if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto])
            {
                if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo])
                {

                  if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeUnknown])
                  {
                    [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

                    NSURL *url= (NSURL*) [[result defaultRepresentation]url];

                    [library assetForURL:url
                     resultBlock:^(ALAsset *asset)
                     {
                         [mutableArray addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];

                         if ([mutableArray count]==count)
                         {
                             imageArray=[[NSArray alloc] initWithArray:mutableArray];
                             [self allPhotosCollected:imageArray];
                         }
                     }
                    failureBlock:^(NSError *error){ NSLog(@"operation was not successfull!");
                    } ];

        }
    }
}
}
};

NSMutableArray *assetGroups = [[NSMutableArray alloc] init];

void (^ assetGroupEnumerator) ( ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop)
{
    if(group != nil)
    {
        [group enumerateAssetsUsingBlock:assetEnumerator];
        [assetGroups addObject:group];
        count=[group numberOfAssets];
    }
};

assetGroups = [[NSMutableArray alloc] init];

[library enumerateGroupsWithTypes:ALAssetsGroupAll
                       usingBlock:assetGroupEnumerator
                     failureBlock:^(NSError *error)
{
    NSLog(@"There is an error");
}];
}

-(void)allPhotosCollected:(NSArray*)imgArray
{
//write your code here after getting all the photos from library...
    NSLog(@"all pictures are %@",imgArray);
}
4

2 に答える 2

0

非常にシンプルで理解しやすいこの回答を試してください

-(void)getFromGallery:(BOOL )IsImages
{
    if(self.csCollectionsArray != nil)
        [self.csCollectionsArray removeAllObjects];
    __block NSMutableDictionary *date = [[NSMutableDictionary alloc] init];
    ALAssetsLibrary *csAssetsLibrary = [[ALAssetsLibrary alloc] init];
    NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces | ALAssetsGroupSavedPhotos;
    [csAssetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:^(ALAssetsGroup *group, BOOL *stop)
    {
        if([group numberOfAssets] > 0)
        {
            if(IsImages)
                [group setAssetsFilter:[ALAssetsFilter allPhotos]];
            else
                [group setAssetsFilter:[ALAssetsFilter allVideos]];
            [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
            {
                if(asset)
                { //1.fetching all assets from device library
                    //2.Add all fetched assests from library
                    [date setObject:asset forKey:[asset valueForProperty:ALAssetPropertyDate]];
                }
            }];
        }
        else
        { NSLog(@"---> load table -------->");
            if(date != nil && date.count > 0)
            { //3.Sort using date by ascending order and moved to dictionary to array
                NSArray *sortedKeys = [[date allKeys] sortedArrayUsingSelector: @selector(compare:)];
                for (NSString *key in sortedKeys)
                    [self.csCollectionsArray addObject: [date objectForKey:key]];
                //4.Load images into collection view after fetching all datas
                [self reloadCollectionView];
                if(self.csCollectionView != nil)
                    [self.csCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:([self.csCollectionsArray count] - 1) inSection:0] atScrollPosition:UICollectionViewScrollPositionBottom animated:YES];
            }
            date = nil;
        }
    }failureBlock:^(NSError *error)
    {
        if((csCollectionsArray == nil || [csCollectionsArray count] == 0))
        {
            ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus]; if(status != ALAuthorizationStatusAuthorized)
            {
                [self showAlertAndCloseUploaderView:@"You can just go to \"Settings\" app (General -> Reset -> Reset Location & Privacy) then come again and click ok when the alert dialog is showing for enable the permission to access the photo library"];
            }
        }
    }];
}

于 2015-05-27T10:51:44.710 に答える