Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Znav
nextObject Incarnation in Objective-C
prevParameter Passing in Objective-C

To throw an exception from an operation implementation, you simply allocate the exception, initialize it, and throw it. For example:

Wiki Markup
{zcode:objc}
-(void) write:(NSMutableArray *)text current:(ICECurrent *)current
{
    // Try to write the file contents here...
    // Assume we are out of space...
    if (error)
        @throw [FSGenericError genericError:@"file too large"];
}
{zcode}

As for out-parameters and return values, you must take care to throw an autoreleased exception.

If you throw an arbitrary Objective-C exception that does not derive from ICEException, the client receives an UnknownException. Similarly, if you throw an "impossible" user exception (a user exception that is not listed in the exception specification of the operation), the client receives an UnknownUserException.

If you throw a run-time exception, such as MemoryLimitException, the client receives an UnknownLocalException. For that reason, you should never throw system exceptions from operation implementations. If you do, all the client will see is an UnknownLocalException, which does not tell the client anything useful.

Info

Three run-time exceptions are treated specially and not changed to UnknownLocalException when returned to the client: ObjectNotExistException, OperationNotExistException, and FacetNotExistException.

Ztop
See Also
Zret
Znav
nextObject Incarnation in Objective-C
prevParameter Passing in Objective-C