यदि आपके पास भारी संख्या में त्रुटि निर्माण है, तो कक्षा का उपयोग करके आपका जीवन अधिक सरल हो सकता है। मैं वास्तव में इस के लिए सी ++ उपयोग करती हैं इसलिए कॉल एक कार्यक्रम की जरूरत नहीं है हटाया जा सकता है (ObjC के विपरीत), लेकिन आप सी, ObjC, या इस के लिए सी ++ का उपयोग कर सकते हैं:
MONErrorDomain.h
// you won't normally need an instance here
@interface MONErrorDomain : NSObject
+ (NSString *)domain; // << required override
- (NSString *)domain; // << returns [[self class] domain]
// example convenience methods:
// uses [self domain]
+ (NSError *)errorWithErrorCode:(NSInteger)errorCode; // << user info would be nil
+ (NSError *)errorWithErrorCode:(NSInteger)errorCode userInfo:(NSDictionary *)userInfo;
@end
MONKoalaError.h
@interface MONKoalaError : MONErrorDomain
+ (NSError *)outOfEucalyptus;
@end
extern NSString * const MONKoalaErrorDomain;
typedef enum MONKoalaErrorCode {
MONKoalaErrorCode_Undefined = 0,
MONKoalaErrorCode_OutOfEucalyptus
} MONKoalaErrorCode;
MONKoalaError.m
// apple recommends we use reverse domains
NSString * const MONKoalaErrorDomain = @"com.mon.koala-library.MONKoalaErrorDomain";
@implementation MONKoalaError
+ (NSString *)domain
{
return MONKoalaErrorDomain;
}
+ (NSError *)outOfEucalyptus
{
NSDictionary * info = …;
return [self errorWithErrorCode:MONKoalaErrorCode_OutOfEucalyptus userInfo:info];
}
@end
तो त्रुटि निर्माण सभी प्रत्येक डोमेन के लिए एक ही स्थान पर है, और ग्राहकों को आसानी से वास्तव में उन्हें मैन्युअल रूप से निर्माण बिना उनके त्रुटियों चुन सकते हैं:
if ([e.domain isEqualToString:MONKoalaErrorDomain]) {
switch (e.code) {
case MONKoalaErrorCode_OutOfEucalyptus : {
self.needsEucalyptus = true;
…
:
if (outError) {
*outError = [MONKoalaError outOfEucalyptus];
}
और त्रुटि हैंडलिंग रूप ले लेता है
बस एक छोटी सी टिप्पणी: जबकि एक एनएसईआरआरआर त्रुटि कोड प्रोग्राम निकास कोड द्वारा भ्रमित नहीं किया जाना चाहिए, मुझे लगता है कि यह 0 के बराबर त्रुटि कोड होने के लिए सहज ज्ञान युक्त काउंटर है। मुझे एक अपरिभाषित त्रुटि के लिए -1 होना पसंद है। – Alerty
@Alerty '0' का उपयोग अपरिभाषित के लिए किया जाता है क्योंकि यह एक अधिक अनुमानित मूल्य है जब कोई प्रोग्रामर तर्क त्रुटि उत्पन्न करता है (उदा। संदेश 'शून्य' या डीबग में डिफ़ॉल्ट प्रारंभिक स्मृति का उपयोग करता है)। यह कहना है कि त्रुटि को 'MONKoalaErrorCode_Undefined' कभी वापस नहीं करना चाहिए यदि यह वास्तव में' MONKoalaErrorCode' की त्रुटि है। – justin