Почему переменные не сохраняются за пределами блока библиотеки активов? - PullRequest
0 голосов
/ 03 апреля 2012

Я столкнулся со странной проблемой, над которой я потратил целую вечность.

Я в основном пытаюсь получить путь к файлу фотографии из библиотеки ресурсов и нарисовать его в формате PDF, используяметод CGRectMake с использованием приведенного ниже кода:

В файле .h:

@property (strong, nonatomic) UIImage *pdfSnagImage;

В файле .m:

NSURL *url = [[NSURL alloc] initWithString:pdf.photo];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

[library assetForURL:url resultBlock:^(ALAsset *asset) {

    ALAssetRepresentation *rep = [asset defaultRepresentation];            
    self.filename = [rep filename];
    NSLog(@"filename for image is: %@", self.filename);

    CGImageRef iref = [rep fullResolutionImage];
    if (iref) {
        self.pdfImage = [UIImage imageWithCGImage:iref];
        NSLog(@"image height %f", self.pdfImage.size.height);

    }

} failureBlock:^(NSError *error) {

    NSLog(@"Couldn't load asset %@ => %@", error, [error localizedDescription]);

}];

UIImage *testImage = self.pdfImage;

[testImage drawInRect:CGRectMake( (pageSize.width - testImage.size.width/2)/2, 350, testImage.size.width/2, testImage.size.height/2)];

Что происходит, так это то, что UIImageпосле блока testImage фактически разрешается перед блоком - поэтому он имеет значение Null, поскольку self.pdfImage устанавливается только внутри блока.

Если я помещаю эти строки кода в блок, я получаю ошибку сметод CGRectMake, недопустимый контекст 0x0.

Как же я могу сначала назначить UImage self.pdfImage, а затем нарисовать его?

1 Ответ

1 голос
/ 11 апреля 2012

Блок выполняется асинхронно ... он выполняется в отдельном потоке. Это дизайн активов lib api.

...