2010-01-07 2 views
2

내 질문은 this one과 비슷하지만 자세한 설명이 필요합니다. 나는 종종 다음과 같은 코드 중에 예외를 얻을 : 나는 objc_exception_throw에 중단 점을 넣을 때핵심 데이터 : 오류 vs 예외 2 부

NSError* error; 
if (![managedObjectContext save:&error]) { 
    NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
} 

그러나, 나는 예외가 save에서 발생되는 것을 알 수 있습니다 :

(gdb) po [$eax name] 
NSInternalInconsistencyException 
(gdb) po [$eax description] 
optimistic locking failure 

내가 기대하지 않을 것이다 이것은 docs이 낙관적 인 잠금 실패가 예외가 아니라 오류를 반환한다고 말하기 때문입니다.

제쳐두고 코드에서 @try ... @catch (NSException * e)으로이 예외를 catch하는 것조차 보이지 않습니다. 그것은 모두 이상합니다.

답변

2

나는 어떤 일이 벌어지고있는 것인가는 objc_exception_throw이 핵심 데이터에서 내부 예외를 잡아 가고 있다고 생각하지만, 실제로는 내 앱으로 퍼콜하지 못합니다. 병합 정책을 설정했기 때문에 잠금 오류가 개체 병합으로 변환되고 모두 잘됩니다.

나는 예외가 있기 전에 무슨 일이 벌어지는 지 알 수 있도록 committedValuesForKeys:을 사용해야합니다. 이것은 매번 발생하지 않습니다.

+0

문제를 해결하면 나 자신의 답을 수락하는 것을 잊지 마십시오. –

+0

비슷한 문제가 있습니다. 예외가 내부적으로 발생하지만 병합 정책에 의해 해결되는 것 같습니다 : 일반적인 예외 중단 점을 사용하면 배경 컨텍스트의 스레드에서 예외를 catch합니다. 그러나 저장 작업 후에 또 다른 중단 점을 설정하면 저장 결과가 '예'이고 오류가 'nil'인 것을 볼 수 있습니다. 따라서 * 문제가 아닌 것으로 보입니다. 어쨌든 나는 그렇게 희망한다! –