2010-07-16 12 views
0

아이폰 기반 앱을 만들고 있는데 예외를 잡는 데 문제가 있습니다.문제 잡기 문제

- (void)updateView:(NSTimer*)t { 

    NSMutableDictionary *requestResult = [[[NSMutableDictionary alloc] init] autorelease]; 

    @try { 
     requestResult = [self.eqParam getParameters]; 
    } 
    @catch (MMConnectionFailed * e) { 
     [self performSelectorOnMainThread:@selector(noConnection) withObject:@"Could not reach server." waitUntilDone:YES]; 
    } 
} 

낮은 쪽의 방법이 아니라 예외를 던져 : D 여기

가 예외를 캐치하지 않았던 코드입니다 : 지금까지, 나는 음 ... 시도 어획량에 문제가 없었다 그러나 여기 없어요 디버그 모드에서 예외가 발생했을 때이 방법이 사용되면 아무 것도 잡히지 않습니다.

단서가 있습니까?


UPDATE : 문제가했지만 예외가 낮은 레버를 던져되지 않은 이유를 난 아직도 모르는 경우 마지막으로, 내가 발견

. 내 getParameters 메소드의 끝을 변경했습니다. 여기 :

- (NSMutableDictionary *)getParameters { 

    @try { 
     // be careful with NSMutableDictionary. Has to be used with setters to be correctly affected 
     lastResponse = [MMSoapMethods getEquipmentParametersWithUserString:user equipmentId:equipmentId]; 
    } 
    @catch (MMConnectionFailed * e) { 
     @throw e; 
    } 
    @finally { 
     if (self.lastResponse) { 
      return lastResponse; 
     }  
     else 
      return nil; 
    } 
} 

난 주위에 @finally 주변 태그가 삭제되었으며 예외가 발생했습니다. 이상하지?

+0

질문에 Objective-C 태그를 추가 할 수도 있습니다. 가능성이 잘못된 유형의 예외를 catch하거나 try-section의 코드에서 예외가 발생하지 않습니다. – Nubsis

답변

1

@finally는 다른 것보다 우선합니다. 기본적으로 @finally 블록에서 값을 반환하지 마십시오.

은 다음과 같이의 getParameters에 대한 코드를 리팩토링 :

- (NSMutableDictionary *)parameters // Objective-C naming convention - no get 
{ 

     // be careful with NSMutableDictionary. Has to be used with setters to be correctly affected 
     // your version did not retain the return result. This does, as long as the property lastResponse is retain 
     self.lastResponse = [MMSoapMethods getEquipmentParametersWithUserString:user equipmentId:equipmentId]; 
     return self.lastResponse; 

     // no need to catch an exception just so you can throw it again 
} 

을 나는 그것이 returna 값에서하지 않는 것을 제외하고, 위에서 당신이 한 것과 동일하다 생각 finally 블록 및 lastReponse은 아래에서 사라지지 않습니다 (GC가 아닌 ref 카운팅을 사용한다고 가정).

+0

네 말이 맞아, 내 코드가 좀 바보 같았 어 ... 네 답변에 대해 대단히 고마워, 완벽 해! –