구문 분석을 사용하여 이미지를 가져 오는 데이터베이스에 연결하는 메서드를 호출하고 있습니다. 모두 잘되고 잘 돌아갑니다 안에 메서드가 있지만 값을 반환하면 어떻게 든 항상 비어있는 (nil) UIImage
을 반환합니다.UIImage 데이터 메서드는 nil을 반환합니다.
- (UIImage *)getImage:(NSString *)objectId
{
__block UIImage *image = nil;
if(![objectId isEqual:@""]){
PFQuery *query = [PFQuery queryWithClassName:@"UserPhoto"];
[query whereKey:@"objectId" equalTo:objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error){
for (PFObject *object in objects) {
PFFile *imageFile = [object objectForKey:@"imageFile"];
[imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
if (!error) {
image = [UIImage imageWithData:imageData];
NSLog(@"self.image: %@",self.image); //logs UIImage
}
else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
} else{
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
return image; //returns nil
}
왜 이런 일이 않습니다
이 내 방법?
이미지를 전역 변수에 넣으려고했으나 작동하지 않았거나 배열에 저장했거나 작동하지 않았습니다. 솔루션을보기에 매우 흥미 롭습니다.
'findObjectsInBackgroundWithBlock :'는 백그라운드에서 돌아가고'return' 문에 도달하면 오래 걸립니다. – rmaddy
아 맞습니다! 어리석은 .. 아마도 아마 비동기 메서드를 사용하여 반환 권리를 차단해야합니까? – bdv
@bdv 'getImage' 메서드를 변경하여 완성 된 매개 변수를 취하는 것이 더 좋을 것입니다. 완료 매개 변수는 이미지가 준비되었을 때 실행됩니다. –