forked from jerrykrinock/CategoriesObjC
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNSError+DecodeCodes.m
More file actions
91 lines (75 loc) · 2.21 KB
/
NSError+DecodeCodes.m
File metadata and controls
91 lines (75 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#import "NSError+DecodeCodes.h"
#import "NSError+MyDomain.h"
@implementation NSError (DecodeCodes)
- (NSArray*)codesArray {
NSMutableArray* codes = [NSMutableArray array] ;
NSError* error = self ;
while (error) {
[codes addObject:[NSNumber numberWithInteger:[error code]]] ;
error = [[error userInfo] objectForKey:NSUnderlyingErrorKey] ;
}
return codes ;
}
- (NSSet*)allInvolvedCodesInDomain:(NSString*)domain {
NSMutableSet* codes = [NSMutableSet set] ;
NSError* error = self ;
while (error) {
NSString* errorDomain = [error domain] ;
if (errorDomain) {
if (!domain || [domain isEqualToString:errorDomain]) {
[codes addObject:[NSNumber numberWithInteger:[error code]]] ;
}
}
error = [[error userInfo] objectForKey:NSUnderlyingErrorKey] ;
}
NSSet* answer = [codes copy] ;
return [answer autorelease] ;
}
- (BOOL)involvesOneOfCodesInSet:(NSSet*)targetCodes
domain:(NSString*)domain {
for (NSNumber* targetCode in targetCodes) {
if ([[self allInvolvedCodesInDomain:domain] member:targetCode]) {
return YES ;
}
}
return NO ;
}
- (BOOL)involvesOneOfCodesInSet:(NSSet*)targetCodes {
return [self involvesOneOfCodesInSet:targetCodes
domain:nil] ;
}
- (BOOL)involvesOneOfMyCodesInSet:(NSSet*)targetCodes {
return [self involvesOneOfCodesInSet:targetCodes
domain:[NSError myDomain]] ;
}
- (BOOL)involvesCode:(NSInteger)code
domain:(NSString*)domain {
return [self involvesOneOfCodesInSet:[NSSet setWithObject:[NSNumber numberWithInteger:code]]
domain:domain] ;
}
- (BOOL)involvesCode:(NSInteger)code {
return [self involvesCode:code
domain:nil] ;
}
- (BOOL)involvesMyDomainAndCode:(NSInteger)code {
return [self involvesCode:code
domain:[NSError myDomain]] ;
}
- (BOOL)isNotFileNotFoundError {
if ([self code] == NSFileReadNoSuchFileError) { // ==260
if ([[self domain] isEqualToString:NSCocoaErrorDomain]) {
return NO ;
}
}
if ([self code] == ENOENT) { // == 2
if ([[self domain] isEqualToString:NSPOSIXErrorDomain]) {
return NO ;
}
}
return YES ;
}
- (BOOL)isUserCancelledCocoaError {
return [self involvesCode:NSUserCancelledError
domain:NSCocoaErrorDomain] ;
}
@end