2010-09-08 4 views
2

J'utilise HessianKit pour communiquer avec le serveur. En situation de réseau ou de serveur, Hessian lancera une exception, donc je mets tous les appels de Hessian dans un bloc @try ... @catch. Tout a bien fonctionné jusqu'à ce que j'ai mis à jour Xcode de 3.2.2 à 3.2.3. J'ai écrit le code de test et trouvé sous Xcode 3.2.3, l'exception catch serait échouée si l'exception était lancée à partir d'un objet proxy.Impossible d'intercepter l'exception de l'objet proxy sous Xcode 3.2.3

MyProxy.h:

@interface MyProxy : NSProxy { 
} 
@end 

MyProxy.m:

@implementation MyProxy 

- (id)init { 
    return self; 
} 

- (void)forwardInvocation:(NSInvocation *)invocation { 
    NSLog(@"Call method %@", NSStringFromSelector([invocation selector])); 
    [NSException raise:@"MyException" format:@"this is an exception"]; 
} 

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { 
    ..... 
} 

@end 

code à l'aide MyProxy:

@try { 
    MyProxy *p = [[MyProxy alloc] init]; 
    [p doSomething]; 
    [p release]; 
} 
@catch (NSException * e) { 
    NSLog(@"%@", e); 
} 

Lorsque ces build de code sous Xcode 3.2.2, l'exception peut être attrapé correctement. Mais sous Xcode 3.2.3, le programme a pris fin après la sortie suivante sur la console:

2010-09-08 21:09:29.877 BriefCase[34651:40b] Call method doSomgthing 
2010-09-08 21:09:29.879 BriefCase[34651:40b] *** Terminating app due to uncaught exception 'MyException', reason: 'this is an exception' 
2010-09-08 21:09:29.880 BriefCase[34651:40b] Stack: (
    45955152, 
    47113004, 
    45692683, 
    45692522, 
    151932, 
    45426420, 
    45423090, 
    9352, 
    4417860, 
    4421967, 
    4447550, 
    4429047, 
    4461016, 
    53399932, 
    45234332, 
    45230248, 
    4420129, 
    4453234, 
    8812, 
    8666 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: “SIGABRT”. 

Que puis-je faire?

Répondre

1

j'ai déposé un bug avec Apple, et la réponse est:

Il a été déterminé que c'est un problème connu, qui est actuellement à l'étude par l'ingénierie. Ce problème a été classé dans notre base de données de bogue sous le Bug ID # 7995323.

0

Peut-être que vos paramètres projet/cible/exécutable ont été foirés? La case "Activer les exceptions Objective-C" est-elle cochée pour votre configuration/cible/etc?

Si c'est le cas, peut-être que vous devriez déposer un bug avec Apple here.

+0

même code, même configuration de projet. J'ai coché la case "Activer Objective-C Exceptions", elle était cochée. Dois-je déposer un bug? Je suis un plus récent d'Objective-C. – gwang

+1

Je le ferais. Je ne peux pas penser à aucune raison que cela ne fonctionnerait pas, si votre cas de test est aussi simple. – jv42

Questions connexes