Penanganan Error Objective-C
Dalam pemrograman Objective-C, penanganan error disediakan dengan kelas NSError yang tersedia di Foundation framework.
Objek NSError merangkum informasi kesalahan yang lebih kaya dan lebih dapat diperluas daripada yang mungkin hanya menggunakan kode kesalahan atau string kesalahan. Atribut inti objek NSError adalah domain kesalahan (diwakili oleh string), kode kesalahan khusus domain dan kamus info pengguna yang berisi informasi khusus aplikasi.
NSError
Program Objective-C menggunakan objek NSError untuk menyampaikan informasi tentang error runtime yang perlu diinformasikan kepada pengguna. Dalam kebanyakan kasus, program menampilkan informasi kesalahan ini dalam dialog atau sheet. Tetapi itu juga dapat menafsirkan informasi dan meminta pengguna untuk mencoba memulihkan dari kesalahan atau mencoba untuk memperbaiki kesalahan sendiri
Objek NSError terdiri dari -
Domain - Domain kesalahan dapat berupa salah satu dari domain NSError standar atau string arbitrer yang mendeskripsikan domain khusus dan domain tidak boleh nihil.
Code - Kode kesalahan untuk kesalahan tersebut.
User Info - Kamus userInfo untuk kesalahan dan userInfo mungkin nihil.
Contoh berikut menunjukkan cara membuat kesalahan khusus
NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain";
NSString *desc = NSLocalizedString(@"Unable to complete the process", @"");
NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : desc };
NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];
Berikut adalah kode lengkap dari contoh kesalahan di atas yang diteruskan sebagai referensi ke pointer -
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
-(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr;
@end
@implementation SampleClass
-(NSString *) getEmployeeNameForID:(int) id withError:(NSError **)errorPtr {
if(id == 1) {
return @"Employee Test Name";
} else {
NSString *domain = @"com.MyCompany.MyApplication.ErrorDomain";
NSString *desc =@"Unable to complete the process";
NSDictionary *userInfo = [[NSDictionary alloc]
initWithObjectsAndKeys:desc,
@"NSLocalizedDescriptionKey",NULL];
*errorPtr = [NSError errorWithDomain:domain code:-101
userInfo:userInfo];
return @"";
}
}
@end
int main() {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SampleClass *sampleClass = [[SampleClass alloc]init];
NSError *error = nil;
NSString *name1 = [sampleClass getEmployeeNameForID:1 withError:&error];
if(error) {
NSLog(@"Error finding Name1: %@",error);
} else {
NSLog(@"Name1: %@",name1);
}
error = nil;
NSString *name2 = [sampleClass getEmployeeNameForID:2 withError:&error];
if(error) {
NSLog(@"Error finding Name2: %@",error);
} else {
NSLog(@"Name2: %@",name2);
}
[pool drain];
return 0;
}
Dalam contoh di atas, kami mengembalikan nama jika idnya adalah 1, jika tidak, kami menyetel objek kesalahan yang ditentukan pengguna.
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
2013-09-14 18:01:00.809 demo[27632] Name1: Employee Test Name
2013-09-14 18:01:00.809 demo[27632] Error finding Name2: Unable to complete the process