Objective c 捕获异常时出现问题

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

我正在制作一款基于iphone的应用程序,但在捕捉异常时遇到了问题。到目前为止,我从未遇到过尝试捕捉的问题,但在这里。。。嗯:D

以下是不捕获任何异常的代码:

 - (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中的代码没有抛出异常。是的,您是对的,我的代码有点愚蠢。。。非常感谢你的回答,太完美了!