2014-04-18 9 views
0

ALAsset을 라이브러리에서 가져 오는 중이지만 UIImageView을 설정하려고 시도하면 UIImage은 0입니다.ALAsset image is null

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 
    [library assetForURL:[NSURL URLWithString:entityObject.localUrl] resultBlock:^(ALAsset *asset) { 
     if (asset) { 
      ALAssetRepresentation *representation = [asset defaultRepresentation]; 
      imageView.image = [UIImage imageWithCGImage:representation.fullResolutionImage 
             scale:[representation scale] 
           orientation:(UIImageOrientation)[representation orientation]]; 

      NSLog(@"imageView.image: %@",imageView.image); // imageView.image: (null) 
      NSLog(@"image size %f", imageView.image.size.width); //image size: 0.000000 
      imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y, imageView.image.size.width, imageView.image.size.height); 

     } else { 
      NSLog(@"test not found?"); 
     } 
    } failureBlock:^(NSError *error) { 
     NSLog(@"FAILED TO FIND %@", error); 
    }]; 

내가 뭘 잘못하고있는가? 이처럼

+1

'imageView' 자체가 nil 일 가능성이 있습니까? 그건 분명히 당신이보고있는 로그 메시지를 일으킬 것입니다. – matt

+0

당신은 그것에 대해 완전히 정확합니다. 감사합니다 – slik

+0

쿨! 나는 그것을 대답으로 두겠다. – matt

답변

1

귀하의 코드는 문제가 어딘가 당신이보고되지 않은 것으로 의심하는 날 리드하는, 멋지다 - 즉, 전무 아마도 imageView 자체입니다. 이로 인해 imageView.image이 0이되어 [UIImage imageWithCGImage...]에 대한 호출이 실패하고 있다고 상상할 수 있습니다. 하지만 그렇지 않습니다!

도덕적 인 의미는 다음과 같습니다. 코드를 조금 더 풀어보십시오. 당신이 쓴 :

imageView.image = [UIImage imageWithCGImage:representation.fullResolutionImage 
            scale:[representation scale] 
          orientation:(UIImageOrientation)[representation orientation]]; 

그건 진짜 문제를 숨기고있어.

UIImage* image = [UIImage imageWithCGImage:representation.fullResolutionImage 
            scale:[representation scale] 
          orientation:(UIImageOrientation)[representation orientation]]; 
NSLog(@"%@", image); 
imageView.image = image; 
// ... 

이 ... 당신이 성공적으로 자산에서 이미지를 가져 오는되었다는 것을 완벽하게 명확하지만, 다음 이미지보기에 할당하려 할 때 것, 이미지보기 : 당신이 쓴 경우에만 그것을 받기 위해 거기에 없었다. 그리고 그것은 공이 떨어 뜨 렸던 곳이었다.

1

나를 위해 작동합니다

ALAssetsLibrary *library = [self defaultAssetsLibrary]; 
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 

     if(result) 
     { 
      ALAssetRepresentation *representation = [result defaultRepresentation]; 
      imageView.image = [UIImage imageWithCGImage:representation.fullResolutionImage 
                scale:[representation scale] 
              orientation:(UIImageOrientation)[representation orientation]]; 

      NSLog(@"imageView.image: %@",imageView.image); // imageView.image: (null) 
      NSLog(@"image size %f", imageView.image.size.width); //image size: 0.000000 
      imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y, imageView.image.size.width, imageView.image.size.height); 

     } 
    }]; 

} failureBlock:^(NSError *error) { 
    NSLog(@"Error loading images %@", error); 
}]; 

- (ALAssetsLibrary *)defaultAssetsLibrary { 
     static dispatch_once_t pred = 0; 
     static ALAssetsLibrary *library = nil; 
     dispatch_once(&pred, ^{ 
      library = [[ALAssetsLibrary alloc] init]; 
     }); 
     return library; 
}