Objective-C Language
Foutafhandeling
Zoeken…
Syntaxis
- NSAssert (voorwaarde, fmtMessage, arg1, arg2, ... ) (cursief gedrukte tekens zijn optioneel) - Beweert dat de voorwaarde naar een echte waarde evalueert. Als dit niet het geval is, zal de bewering een uitzondering genereren (NSAssertionException), waarbij het fmtMessage is opgemaakt met de meegeleverde args
Opkomen
@implemenetation Triangle
...
-(void)setAngles:(NSArray *)_angles {
self.angles = _angles;
NSAssert((self.angles.count == 3), @"Triangles must have 3 angles. Array '%@' has %i", self.angles, (int)self.angles.count);
CGFloat angleA = [self.angles[0] floatValue];
CGFloat angleB = [self.angles[1] floatValue];
CGFloat angleC = [self.angles[2] floatValue];
CGFloat sum = (angleA + angleB + angleC);
NSAssert((sum == M_PI), @"Triangles' angles must add up to pi radians (180°). This triangle's angles add up to %f radians (%f°)", (float)sum, (float)(sum * (180.0f / M_PI)));
}
Deze beweringen zorgen ervoor dat je een driehoek geen onjuiste hoeken geeft, door een uitzondering te maken als je dat doet. Als ze geen uitzondering hebben gemaakt dan de driehoek, omdat ze helemaal geen echte driehoek zijn, kunnen er in de latere code enkele fouten optreden.
Fout- en uitzonderingsafhandeling met try-catch-blok
Uitzonderingen vertegenwoordigen bugs op programmeerniveau, zoals proberen toegang te krijgen tot een array-element dat niet bestaat.
Fouten zijn problemen op gebruikersniveau, zoals proberen een bestand te laden dat niet bestaat. Omdat fouten worden verwacht tijdens de normale uitvoering van een programma.
Voorbeeld:
NSArray *inventory = @[@"Sam",
@"John",
@"Sanju"];
int selectedIndex = 3;
@try {
NSString * name = inventory[selectedIndex];
NSLog(@"The selected Name is: %@", name);
} @catch(NSException *theException) {
NSLog(@"An exception occurred: %@", theException.name);
NSLog(@"Here are some details: %@", theException.reason);
} @finally {
NSLog(@"Executing finally block");
}
OUTPUT:
Er is een uitzondering opgetreden: NSRangeException
Hier zijn enkele details: *** - [__ NSArrayI objectAtIndex:]: index 3 voorbij grenzen [0 .. 2]
Uitvoering eindelijk blokkeren