From 479cccebe86c876c4a419b2cc1c34b97d5bd1308 Mon Sep 17 00:00:00 2001 From: rfm Date: Mon, 13 Jan 2025 15:31:09 +0000 Subject: [PATCH] Correct (for #486) -localizedDescription to always return a string. --- Source/NSError.m | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/Source/NSError.m b/Source/NSError.m index 0bf860408..59c5dc427 100644 --- a/Source/NSError.m +++ b/Source/NSError.m @@ -81,14 +81,24 @@ [super dealloc]; } +- (NSString*) _fallback +{ + return [NSString stringWithFormat: @"Error Domain=%@ Code=%lld", + [self domain], (long long)[self code]]; +} + - (NSString*) description { NSMutableString *m = [NSMutableString stringWithCapacity: 200]; NSUInteger count = [_userInfo count]; NSString *loc = [self localizedDescription]; + NSString *fallback = [self _fallback]; - [m appendFormat: @"Error Domain=%@ Code=%lld \"%@\"", - [self domain], (long long)[self code], loc]; + [m appendString: fallback]; + if (NO == [fallback isEqual: loc]) + { + [m appendFormat: @" \"%@\"", loc]; + } if ([loc isEqual: [_userInfo objectForKey: NSLocalizedDescriptionKey]]) { @@ -206,7 +216,21 @@ - (NSString *) localizedDescription { - return [_userInfo objectForKey: NSLocalizedDescriptionKey]; + NSString *s = [_userInfo objectForKey: NSLocalizedDescriptionKey]; + + if (nil == s) + { + s = [_userInfo objectForKey: NSLocalizedFailureReasonErrorKey]; + if (s) + { + s = [NSString stringWithFormat: @"Operation failed %@", s]; + } + else + { + s = [self _fallback]; + } + } + return s; } - (NSString *) localizedFailureReason