Objective c 捕获异常时出现问题
我正在制作一款基于iphone的应用程序,但在捕捉异常时遇到了问题。到目前为止,我从未遇到过尝试捕捉的问题,但在这里。。。嗯:D 以下是不捕获任何异常的代码:Objective c 捕获异常时出现问题,objective-c,exception,try-catch,Objective C,Exception,Try Catch,我正在制作一款基于iphone的应用程序,但在捕捉异常时遇到了问题。到目前为止,我从未遇到过尝试捕捉的问题,但在这里。。。嗯:D 以下是不捕获任何异常的代码: - (void)updateView:(NSTimer*)t { NSMutableDictionary *requestResult = [[[NSMutableDictionary alloc] init] autorelease]; @try { requestResult = [self.eq
- (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];
}
}
在异常情况下,低端方法在调试模式下抛出井异常,但是当涉及此方法时,不会捕获任何内容
有线索吗
更新: 最后,我找到了问题所在,但我仍然不知道为什么没有在较低的级别上抛出异常。我更改了
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块返回值
重构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
}
我认为上述内容与您所拥有的内容相同,只是它不会从finally块返回一个值,并且lastReponse不会从您下面消失(假设您使用的是ref计数而不是GC)。您也可以将Objective-C标记放在问题中。很可能是您捕获了错误类型的异常,或者try-section中的代码没有抛出异常。是的,您是对的,我的代码有点愚蠢。。。非常感谢你的回答,太完美了!