The advantage of encapsulating this information in an object like NSError, as opposed to, say, throwing exceptions willy-nilly, is that these error objects can be easily passed between different objects and contexts.

Use NSError where there can be multiple errors instead of a bool return.

Source: http://nshipster.com/nserror/