Saya pribadi menggunakan domain gaya DNS terbalik. Sebagai contoh:
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
Bagian ketiga dari domain ( @"myproject"
) hanya digunakan untuk membedakan kesalahan dari proyek ini ( "My Project"
) dari kesalahan dalam proyek lain ( "My Other Project"
=> com.davedelong.myotherproject
).
Ini adalah cara sederhana untuk memastikan bahwa aku tidak akan konflik dengan kesalahan orang lain domain (jika saya menggunakan kode pihak ke-3), kecuali pengembang yang sengaja mencoba untuk main-main dengan hanya saya (yang saya percaya akan sangat tidak mungkin. ..).
Adapun konflik penomoran kode, jangan khawatir tentang itu. Selama kode itu unik dalam suatu domain , Anda akan baik-baik saja.
Adapun kesalahan menerjemahkan, itu terserah Anda. Apa pun yang Anda lakukan, pastikan Anda mendokumentasikannya dengan baik. Secara pribadi , saya biasanya hanya meneruskan kesalahan yang dihasilkan kerangka kerja saat mereka datang kepada saya, karena saya tidak pernah yakin bahwa saya akan menangani semua kode dan menerjemahkan semua userInfo menjadi sesuatu yang lebih spesifik untuk proyek saya. Kerangka kerja dapat mengubah dan menambahkan lebih banyak kode, atau mengubah arti kode yang ada, dll. Ini juga membantu saya secara lebih spesifik mengidentifikasi dari mana kesalahan itu berasal. Misalnya, jika kerangka kerja StackKit saya menghasilkan kesalahan di com.stackkit
domain, saya tahu itu masalah kerangka kerja. Namun, jika menghasilkan kesalahan dalam NSURLErrorDomain
, maka saya tahu bahwa itu secara khusus berasal dari mekanisme pemuatan URL.
Apa yang dapat Anda lakukan adalah menangkap kesalahan yang dihasilkan kerangka kerja dan membungkusnya dalam objek kesalahan baru yang memiliki domain Anda dan kode generik, sesuatu seperti kFrameworkErrorCodeUnknown
atau sesuatu, dan kemudian menempatkan kesalahan yang ditangkap di userInfo
bawah NSUnderlyingErrorKey
. CoreData melakukan ini banyak (misalnya, jika Anda mencoba untuk save:
sebuah NSManagedObjectContext
, tetapi Anda memiliki kesalahan integritas hubungan, Anda akan mendapatkan error kembali tunggal, tetapi NSUnderlyingErrorKey
akan berisi lebih banyak informasi, seperti khusus yang hubungan yang salah, dll).