gpt4 book ai didi

objective-c - 为什么变量不保留在 Asset-Library block 之外?

转载 作者:行者123 更新时间:2023-11-29 04:43:35 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我花了很长时间来解决这个问题。

我基本上试图从资源库中获取照片的文件路径,并使用以下代码使用 CGRectMake 方法将其绘制在 pdf 上:

在.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)];

发生的情况是 block 之后的 UIImage,testImage 实际上是在 block 之前解析的 - 因此它是 Null,因为 self.pdfImage 仅在 block 内设置。

如果我将这些代码行放入 block 中,我会收到 CGRectMake 方法的错误:Invalid Context 0x0。

到底如何先分配 self.pdfImage UIImage 然后绘制它?

最佳答案

该 block 是异步执行的...它在单独的线程上执行。这就是assets lib api的设计。

关于objective-c - 为什么变量不保留在 Asset-Library block 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com