Learn Objective C(6)Programming with Objective-C - Working with Blocks and Deali

Learn Objective C(6)Programming with Objective-C - Working with Blocks and Dealing with Errors and Conventions

7. Working with Blocks
…snip...

8. Dealing with Errors
NSError objects.

8.1 Use NSError for Most Errors
Some Delegate Methods Alert You to Errors
For example, NSURLConnectionDelegate protocol includes a connection:didFailWithError: method.
- (void) connection:(NSURLConnection *) connection didFailWithError:(NSError *) error;

If an error occurs, this delegate method will be called to provide us with an NSError object to describe the problem.

Some Methods Pass Errors by Reference
- (BOOL) writeToURL:(NSURL *) aURL
               options: (NSDataWritingOptions) mask
                errors:( NSError **) errorPtr;

Before we call this method, we need to to create a suitable pointer.

NSError *anyError;
BOOL success = [receivedData writeToURL: someLocalFileURL
                                                  options:0
                                                       error:&anyError];
if(!success) {
     NSLog(@"write failed with error: %@", anyError);
}

We need to check the status first, then check the NSError object, if we are not interested in the error object, just pass NULL.

Recover if Possible or Display the Error to the User
How to alert the user, UIAlertView.

Generating Your Own Errors
Define the error domain first,
com.sillycat.easyLocation.ErrorDomain

NSString *domain = @"com.sillycat.easyLocation.ErrorDomain";
NSString *desc = NSLocalizedString(@"Unable to … ", @"");
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };

NSError *error = [NSError errorWithDomain:domain
                                                  code: -101
                                              userInfo:userInfo];

NSLocalizedString -----> Localizable.strings

8.2 Exceptions Are Used for Programmer Errors
NSException

@try {
     //do something that might throw an exception
}
@catch(NSException *exception) {
     //deal with the exception
}
@finally {
     
}

9. Conventions
9.1 Some Names Must Be Unique Across Your App
Class Names Must Be Unique Across an Entire App
Objective-C classes must be named uniquely not only within the code that you're writing in a project, but also across any frameworks or bundles you might be including.

We should avoid using generic class names like ViewController or TextParser.
NS   ----   Foundation(OS X and iOS) and Application Kit(OS X)
UI    ----   UIKit(iOS)
AB   ----   Address Book
CA ------ Core Animation
CI -------  Core Image

Method Names Should be Expressive and Unique Within a Class

Always Use a Prefix for Method Names in Categories on Framework Classes

Local Variables Must Be Unique Within The Same Scope

9.2 Some Method Names Must Follow Conventions
Accessor Method Names Must Follow Conventions
firstName ----  accessor method firstName
               ----  setter method    setFirstName
paused     ----  accessor method isPaused
               ----   setter method    setPaused

Object Creation Method Names Must Follow Conventions

NSMutableArray *array = [[NSMutableArray alloc] init ];

NSMutableArray *array = [NSMutableArray new];

NSMutableArray *array = [NSMutableArray array]; 


References:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithBlocks/WorkingwithBlocks.html#//apple_ref/doc/uid/TP40011210-CH8-SW1

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ErrorHandling/ErrorHandling.html#//apple_ref/doc/uid/TP40011210-CH9-SW1

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html#//apple_ref/doc/uid/TP40011210-CH10-SW1

你可能感兴趣的:(Objective-C)