Ich bin auf ein seltsames Problem gestoßen, an dem ich lange gearbeitet habe.Warum werden Variablen außerhalb des Asset-Library-Blocks nicht beibehalten?
Ich bin im Grunde versucht, den Dateipfad eines Fotos aus der Asset-Bibliothek zu erhalten und es auf einem pdf zieht die CGRectMake Methode unter Verwendung des Codes:
In der H-Datei:
@property (strong, nonatomic) UIImage *pdfSnagImage;
In der .m-Datei:
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)];
Was ist passiert, dass die UIImage nach dem Block wird Testbilder tatsächlich vor dem Block aufgelöst werden - daher ist es Null ist, als self.pdfIm Alter wird nur innerhalb des Blocks festgelegt.
Wenn ich diese Codezeilen in den Block einfüge, erhalte ich einen Fehler mit der CGRectMake-Methode, ungültiger Kontext 0x0.
Wie kann ich das self.pdfImage UIImage zuerst zuweisen und dann zeichnen?
In welchen Kontext zeichnen Sie? Die Methode 'assetForURL: resultBlock: failureBlock:' kehrt sofort zurück und geht dann asynchron vor dem Aufruf des Codes in 'resultBlock' oder 'failureBlock'. Daher müssen Sie Ihre Arbeit in einem dieser Blöcke erledigen. –
Die folgende SO scheint Frage relevant: http://stackoverflow.com/questions/7234445/wait-for-assetforurl-blocks-to-be-completed – lukasz
@ Paul.s Könnten Sie erklären, was Sie meinen, was Kontext zeichne ich ein? – jcrowson