2014-09-03 2 views
2

구문 분석을 사용하여 이미지를 가져 오는 데이터베이스에 연결하는 메서드를 호출하고 있습니다. 모두 잘되고 잘 돌아갑니다 안에 메서드가 있지만 값을 반환하면 어떻게 든 항상 비어있는 (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 
} 

왜 이런 일이 않습니다

이 내 방법?

이미지를 전역 변수에 넣으려고했으나 작동하지 않았거나 배열에 저장했거나 작동하지 않았습니다. 솔루션을보기에 매우 흥미 롭습니다.

+1

'findObjectsInBackgroundWithBlock :'는 백그라운드에서 돌아가고'return' 문에 도달하면 오래 걸립니다. – rmaddy

+0

아 맞습니다! 어리석은 .. 아마도 아마 비동기 메서드를 사용하여 반환 권리를 차단해야합니까? – bdv

+1

@bdv 'getImage' 메서드를 변경하여 완성 된 매개 변수를 취하는 것이 더 좋을 것입니다. 완료 매개 변수는 이미지가 준비되었을 때 실행됩니다. –

답변

0

코드의 어딘가에서 반환 된 이미지로 ImageView를 업데이트한다고 가정 할 수 있습니다.

* 팁 : UI 변경 사항은 주 스레드에서만 작동합니다.

+0

그러나 좋은 대답과 좋은 생각, UI 요소의 대리자 메서드에서 이미지를로드/생성해야하므로 불행히도이 방법을 사용할 수 없습니다. – bdv

관련 문제