Objective c 在试块中,如果没有异常发生,如何做某事?obj-c

Objective c 在试块中,如果没有异常发生,如何做某事?obj-c,objective-c,exception,exception-handling,try-catch,Objective C,Exception,Exception Handling,Try Catch,在标准的try-catch错误块中,如果没有抛出错误,我如何建议程序只执行某些操作 例如,如果我想为基于ip的东西配置一个代理,并且如果它都能正常工作,则应该将按钮灰显。首先将变量设置为true,即noError=true 如果出现任何错误,请将其设置为false我会这样做(c#,但是这个想法可以在其他地方重复使用) 您只需将其放入try块,但放在可能抛出的语句之后。如果这样做,控制流将转向catch块并跳过后面的指令。这不是try应该使用的方式 当然,如果您有多个可能抛出异常的语句,并且只是将

在标准的try-catch错误块中,如果没有抛出错误,我如何建议程序只执行某些操作


例如,如果我想为基于ip的东西配置一个代理,并且如果它都能正常工作,则应该将按钮灰显。

首先将变量设置为true,即
noError=true

如果出现任何错误,请将其设置为false

我会这样做(c#,但是这个想法可以在其他地方重复使用)


您只需将其放入
try
块,但放在可能抛出的语句之后。如果这样做,控制流将转向catch块并跳过后面的指令。这不是
try
应该使用的方式

当然,如果您有多个可能抛出异常的语句,并且只是将所有内容塞进一个毛茸茸的全局try块中,那么识别正确的位置就变得更加困难。这就是为什么巨大的全局try块是反模式的原因之一。

好的

@尤萨林 不起作用

@彼得旺
你的有效。编译器无法解释if(noerror),它必须是if(noerror==false)

BOOL noerror=TRUE;@try{[self-setup:communicator];}@catch(ICEException*ex){noerror=FALSE;[self-performselectornmainthread:@selector(exception:)with object:[ex-description]waituntldone:NO];[communicator-destroy];self.communicator=nil;initCallBackButton.hidden=FALSE;}if(noerror){initCallBackButton.hidden=TRUE;//wenn die session aufgebaut ist,blende den button aus}至少在这个模块中,它不起作用,但我真的不明白,为什么?这个简单的想法听起来至少是正确的事实上我不知道objective-c的语法,但我猜是对的我认为这是个想法,我没有发现,所以我试过了。不起作用,下一条指令被调用,即使有异常。好吧,这就是不好w异常有效。请发布您的实际代码-我们必须缺少某些内容。(例如,如果您在try块中调用外部函数,其中一个函数可能会打印某个内容的堆栈跟踪,使其看起来像您收到了异常。但如果它确实到达
您的
块,则它将被终止。
try {
 try {
 // some code
 }
 catch 
 { throw; }


 // code, done only if there was no error
}
catch {
 // read the exception.
}