views:

84

answers:

3

Is there in objective-C any way to see if it is possible to do a certain task without risking crash the application?

Other languages like javascript have

try
  {
  //Run some code here
  }
catch(err)
  {
  //Handle errors here
  }

is there something in Objective-C? If so, what is the syntax?

thanks.

+3  A: 

Have a look at Exception Handling :

Cup *cup = [[Cup alloc] init];

@try {
    [cup fill];
}
@catch (NSException *exception) {
    NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
}
@finally {
    [cup release];
}

Also worth to have a look: Error Handling Programming Guide

Felix Kling
Don't do that.exceptions are hard errors on iOS and are not mesntto be recovered from.
bbum
@bbum: Not custom exceptions you might throw. But I agree, for general error handling, this documentation might be better: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40001806
Felix Kling
Even custom exceptions. If those exceptions go through any frame of system code, the behaviour is undefined. Exceptions for flow control are only safe in 100% isolation from framework code.
bbum
+3  A: 

While Felix's answer is technically correct, it isn't the whole story.

On the iOS and Mac OS X, exceptions are used to indicate non-coverable programmer error. Exceptions arr not used to indicate user error or recoverable errors like on Java.

Any exception that passes through system framework code will leave said framework in an undefined state.. Catching said exceptions and trying to recover from it will lead to memory leaks, undefined behaviour and crashing.

bbum
so, there's no hope of existing anything that can be used like it was in Javascript and other languages?
Digital Robot
Nope. The design pattern used is that exceptions are uncoverable errors.
bbum
A: 

The real question is, what are you trying to do in that error catching block?

There are different ways to hook into different kinds of errors. What kind of code specifically are you looking to wrap in a block like that?

Kendall Helmstetter Gelner