2012-01-26 3 views
0

NSdata를 사용하여 이미지를 만들려고합니다. UIImage의 imageWithData : 메서드가 성공적으로 그것을 만들 수 있다면, 나는 경로를 따라갈 것이지만 만약 내가 그것을 만들 수 없다면 나는 다른 방법을 따르고 싶다.imageWithData에 의해 throw 된 예외를 catch하는 방법 :

이것도 가능합니까?

나는
@try { 
     im = [UIImage imageWithData:data]; 
     NSLog(@"Trying"); 
    } 
    @catch (NSException * e) { 
     NSLog(@"Exception");  
     anotherData = doSomethingWithData(data) 
     im = [UIImage imageWithData:anotherData]; 
    } 
    @finally { 
     NSLog(@"Final"); 
     [self.questionList addObject:im]; 
    } 

을 시도하지만 응용 프로그램 충돌이 발생합니다.

어떻게 응용 프로그램을 중단시키지 않고이 예외를 잡을 수 있습니까?

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0' 

코드 데이터에서 이미지를 생성하지 않지만 여전히 예외 또는 그것에 대해 아무것도 발생하지 않습니다

예외는 이것이다. 이미지가 생성되었는지 아닌지를 이해할 수있는 방법이 있습니까? imnil을 유지하고이 배열에 nil를 추가 할 수 없기 때문에

+0

어떤 오류가 발생하고 있습니까? – Kevin

+0

'NSInvalidArgumentException'을 (를) 감지 할 수 없습니다. – basvk

답변

2

당신은 오류가 발생합니다.

당신은 그런 식으로 그것을 할 수 :

im = [UIImage imageWithData:data]; 

if(im == nil) { 
    anotherData = doSomethingWithData(data) 
    im = [UIImage imageWithData:anotherData]; 
} 

if(im != nil) 
    [self.questionList addObject:im]; 
0

당신의 패턴과 유사한 구현을 위 최종적 같은 차단하려면를 다시 작성하는 것입니다 :

@finally { 
    NSLog(@"Final"); 
    if(im) { 
     [self.questionList addObject:im]; 
    } 
} 

을하지만 코드의 전체 조각 예외 처리가 필요하지 않도록 쉽게 다시 작성할 수 있습니다.

+1

@ harakiri의 코드 스 니펫은 예외를 사용하지 않고 재 작성하는 완벽한 예입니다. – Damien

+0

답변 해 주셔서 감사합니다. Kevin의 질문 이후 나는 내가 만들고자하는 이미지가 무의미하다는 것을 깨달았고 나는 단지 'if'블록을 사용했다. – gurkan

관련 문제