проблема с библиотекой AlAsset - PullRequest
0 голосов
/ 01 ноября 2011

У меня проблема с библиотекой ALAsset: у меня UIView со 100 видами изображений. Когда представление загружается, я вызываю функцию для генерации изображений из имени файла.

Это мой класс:

@interface myClass
{
    NSString *fileName;
    int pathId;
}

viewDidLoad

-(void)viewDidLoad
{
    NSMutableArray *imageCollectionArray = [self createImage:arrayOfmyClassObject];

     //Here I'm binding the 100 images in UIView using the images in imageCollectionArray
}

Это мой метод, в котором я нашел проблему:

- (NSMutableArray *)createImage:(NSMutableArray *)imageFileNamesArray 
{
    imageArray = [[NSMutableArray alloc] init]; 
    for (int imageNameKey = 0; imageNameKey<100; imageNameKey++) 
    {
         myClass *obj= [imageFileNamesArray objectAtIndex:imageNameKey];
        if(obj.pathId == 0)
        {

            //Here adding the bundle image into the imageArray
                [imageArray addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:obj.fileName ofType:@"png" inDirectory:@"Images"]]];
        }
        else
        {
                typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset); typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);
             ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) {
             };
             ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
            CGImageRef iref = [rep fullResolutionImage];
            UIImage *images; 
            if (iref)
                {

            //Here adding the photo library image into the imageArray
             images = [UIImage imageWithCGImage:iref];
            [imageArray addObject:images];

            }
            else
            {
            //Here adding the Nofile.png image into the imageArray if didn't find a photo library image
              images = [UIImage imageNamed:@"Nofile.png"];
             [imageArray addObject:images];
            }

             ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) {

                        //Here adding the Nofile.png image into the imageArray if any failure occurs
                 [imageArray addObject:[UIImage imageNamed:@"Nofile.png"]]; 

            NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
             };
             NSURL *asseturl = [NSURL URLWithString:obj.fileName];
             ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
            [assetslibrary assetForURL:asseturl
             resultBlock:resultblock failureBlock:failureblock];
        }
    }
    return imageArray;
}

Проблема заключалась в том, что когда я загружаю представление в первый раз, когда изображения библиотеки активов не генерируются, отображаются только изображения в комплекте, если я перехожу к любому другому представлению и возвращаюсь обратно к представлению 100 изображений, то генерируются изображения активов. . И работает отлично. Проблема в том, что та же функция не генерирует изображения активов при первой загрузке. Как я могу это исправить? Заранее спасибо.

1 Ответ

0 голосов
/ 02 ноября 2011

Все методы, связанные с ALAssetLibrary, являются асинхронными, поэтому ваше представление может завершить свой жизненный цикл загрузки, прежде чем будут возвращены нужные данные.Вы должны принять это во внимание и при необходимости перерисовать свое представление (или его часть).

...