iphoneiosobjective-cios4nserror

How can I use NSError in my iPhone App?


I am working on catching errors in my app, and I am looking into using NSError. I am slightly confused about how to use it, and how to populate it.

Could someone provide an example on how I populate then use NSError?


Solution

  • Well, what I usually do is have my methods that could error-out at runtime take a reference to a NSError pointer. If something does indeed go wrong in that method, I can populate the NSError reference with error data and return nil from the method.

    Example:

    - (id) endWorldHunger:(id)largeAmountsOfMonies error:(NSError**)error {
        // begin feeding the world's children...
        // it's all going well until....
        if (ohNoImOutOfMonies) {
            // sad, we can't solve world hunger, but we can let people know what went wrong!
            // init dictionary to be used to populate error object
            NSMutableDictionary* details = [NSMutableDictionary dictionary];
            [details setValue:@"ran out of money" forKey:NSLocalizedDescriptionKey];
            // populate the error object with the details
            *error = [NSError errorWithDomain:@"world" code:200 userInfo:details];
            // we couldn't feed the world's children...return nil..sniffle...sniffle
            return nil;
        }
        // wohoo! We fed the world's children. The world is now in lots of debt. But who cares? 
        return YES;
    }
    

    We can then use the method like this. Don't even bother to inspect the error object unless the method returns nil:

    // initialize NSError object
    NSError* error = nil;
    // try to feed the world
    id yayOrNay = [self endWorldHunger:smallAmountsOfMonies error:&error];
    if (!yayOrNay) {
       // inspect error
       NSLog(@"%@", [error localizedDescription]);
    }
    // otherwise the world has been fed. Wow, your code must rock.
    

    We were able to access the error's localizedDescription because we set a value for NSLocalizedDescriptionKey.

    The best place for more information is Apple's documentation. It really is good.

    There is also a nice, simple tutorial on Cocoa Is My Girlfriend.