2011-02-24 6 views
3

두 번째 어설 션에서이 코드가 어떤 상황에서 중단되는지 궁금합니다. 다시 말해 -[UIImage CGImage]nil을 반환 할 수 있습니까? 설명서에는 여기에 그다지 자세히 설명되어 있지 않습니다.- [UIImage CGImage] returns nil

- (void)setImage:(UIImage *)anImage { 
    assert(anImage); 
    CGImageRef cgimage = anImage.CGImage; 
    assert(cgimage); 
} 

UIImage는 앱 번들에서 가져온 것이므로 정확합니다. 지금까지 사례를 재현하지 못했지만 일부 사용자 충돌 보고서가 표시됩니다.

+0

어떻게 UIImage를 받고 있습니까? –

+0

@Stephen,'- [UIImage imageNamed : @ "pic.png"]'를 사용하십시오. –

답변

2

다른 가능성은 동일한 UIImage 객체에 동시에 액세스하는 여러 스레드가 있다는 것입니다. 이것은 동일한 증상으로 내 코드에서 발생했습니다.

액세스 패턴이 실행마다 변경되는 타이밍에 따라 달라질 수 있으므로이 경우에도 간헐적 인 충돌 보고서를 설명 할 수 있습니다. 나는이 문서에서 건너 한

1

내가 아는 한, 첫 번째 어설 션이 통과하면 (이미지가 0이 아닌 것을 나타냄) 이미지를로드 할 수 없다는 것을 의미합니다. 이미지가 번들에 복사되고 있는지 확인하십시오.

+0

번들에 포함되어 있으며 99.9 %의 경우에서 작동합니다. 두 번째 단언에서는 내가 알아 내지 못했던 드문 상황에서만 실패합니다. –

1

anImage가 nil이 아닌 것하지만 cgimage 다음과 같이 전무가 고안 할 수있을 것 례 : 이전 답변을 표시 한

UIImage* myImage = [[UIImage alloc] initWithCGImage:nil]; 

과 같은 시나리오에서 하나의 자신을 발견 할 수있는 다른 방법이 있습니다.

+0

네가 맞아, 나는 이미지를 만들기 위해'- [UIImage imageNamed : @ "pic.png"]'를 사용하고있다. 그래서 나에게는 아직도 수수께끼입니다. 나는 assure에 충돌하는 대신에 무 이미지를 그냥 무시함으로써이 문제를 해결했다. –

+0

그리고 모든 것이 빌드 될 때'pic.png'가 앱의 리소스에 존재한다고 확신합니까? 이미지 자체가 없을 경우 루틴은'nil'을 반환합니다. 또 다른 가능성은 이미지가 어떻게 든 손상된다는 것입니다 ... – fbrereto

+0

완전히 존재하는지 확인하십시오. 그것은 99.9 %의 경우에서 작동하며, 실패한 경우도 재현 할 수 없었습니다. 경우에 따라 실패하는 일부 충돌 보고서를 발견했습니다. 특히, 장치를 파손하는 사람들을 위해, 문제는 무작위로 발생합니다. –

5

또 하나의 가능성 다음있는 UIImage 객체가 CIImage 객체를 사용하여 초기화 된 경우

, 속성 값은 NULL입니다.