2014-01-08 2 views
1

NSError가 사용되지 않는 가능한 오류를 처리하는 일반적인 질문입니다.NSError가없는 코코아/iOS 오류 처리 스타일

의 우리가/코코아의 코드를 다음과 같이 몇 가지 일반적인 아이폰 OS 있다고 가정 해 봅시다 :

NSXMLParser *parser = [[NSXMLParser alloc] initWithData: myData]; 

문서는 "오류가 발생하면 무기 호"는 NSXMLParser 객체가 반환, 또는 될 것이라고 주장한다.

은 (공식적으로,이 특정 방법은 행복하게 유효한 NSXMLParser 인스턴스를 반환 '데이터'인수 전무를 취할 것입니다.)

나는 매우 많은 아이폰 OS 개발자가 반환 값의 이러한 유형을 확인하지 것으로 나타났습니다. 그들은 init 클래스가 항상 작동했다고 가정합니다. 저에게는 위험한 것이 있습니다. 그러나 노련한/물린 코코아 개발자의 견해를 듣고 싶습니다.

반환 값에 NSAssert를 사용하면 개발 중에는 나를 보호 할 수 있지만 응용 프로그램이 야생 상태 일 때는 나를 보호하지 못합니다.

Nil 반환 값을 확인하고 내 자신의 NSError를 구성해야합니까? 아니면 다른 것을할까요?

+0

@ 브라이언, 그건 내가 묻고있다. 이 특별한 오류를 어떻게 처리하겠습니까? – Womble

+0

NSAssert를 사용하여 Nil이 아닌지 확인합니다. 오류가 발생하면, 나는 아무것도 파서를 얻고 어떤 일도 끝내지 않을 것이다. 잘하면 내가 얻을 수있는 최선입니다. –

+1

@Abizern, 코드 줄을 Google로 검색하면 많은 결과를 얻을 수 있습니다. 압도적 인 숫자의 구현은 반환 값을 확인하지 않습니다. 그것은 단지 샘플/프래그먼트 구현 때문일 수 있지만, 일반적인 접근법은 동일하다고 생각합니다. 그러나 당신이 우리와 당신의 접근 방식을 공유하고 싶다면, 듣기 좋다. – Womble

답변

4

Apple init 메소드가 복구 가능한 방식으로 실패 할 경우 다소 불규칙한 규칙은 NSError 매개 변수를 갖게된다는 것입니다. NSString과 같은 메소드가 초기화에 실패하는 경우 복구가 불가능할 정도로 매우 나쁩니다. 아마 그렇게 나쁜 할당 NSError은 훨씬 덜 NSLog 메시지가 아닙니다. 응용 프로그램은 당신이 무엇을 하든지 곧 충돌 할 것입니다.

불행히도 제 3 자 클래스는 거의이 규칙을 따르지 않습니다.

+0

Zaph에게 감사하고 사려 깊은 답장을 보내 주셔서 감사합니다. 나는 너의 접근 방식을 취할 것이다. – Womble