проблема с библиотекой ALAsset

#iphone #alassetslibrary

#iPhone #алассетская библиотека

Вопрос:

Я столкнулся с проблемой с библиотекой 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. Я не верю, что этот фрагмент кода может быть скомпилирован.

2. Невозможно понять смысл вашего кода. Повсюду скобки.

3. Странный код… Не забывайте, что ALAsset является асинхронным, возможно, вам нужно выполнить setNeedsDisplay при загрузке всех изображений

4. @adrian: Я также работаю с библиотекой ALAsset. Как вы решили проблему с памятью, загрузив кучу изображений из объекта ALAsset в массив? Можете ли вы связаться со мной, потому что в вашем профиле я не вижу вашу электронную почту? Спасибо!

Ответ №1:

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