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?
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
Je le ferais. Je ne peux pas penser à aucune raison que cela ne fonctionnerait pas, si votre cas de test est aussi simple. – jv42