How can I use NSError in my iPhone App?

后端 未结 9 1125
Happy的楠姐
Happy的楠姐 2020-12-07 06:32

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.

9条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-07 07:07

    I'll try summarize the great answer by Alex and the jlmendezbonini's point, adding a modification that will make everything ARC compatible (so far it's not since ARC will complain since you should return id, which means "any object", but BOOL is not an object type).

    - (BOOL) 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
            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 NO;
        }
        // wohoo! We fed the world's children. The world is now in lots of debt. But who cares? 
        return YES;
    }
    

    Now instead of checking for the return value of our method call, we check whether error is still nil. If it's not we have a problem.

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

提交回复
热议问题