Sunday, March 11, 2012

How to 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?


3 comments:

  1. 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.

    ReplyDelete
  2. Great answer Alex. One potential issue is the NULL dereference. Apple's reference on Creating and Returning NSError objects

    ...
    [details setValue:@"ran out of money" forKey:NSLocalizedDescriptionKey];

    if (error != NULL) {
    // 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;
    ...

    ReplyDelete
  3. Please refer following tutorial

    i hope it will helpful for you but prior you have to read documentation of NSError

    ReplyDelete