Browse Source

Add safeClassNameForObject: and use it

Tanner Bennett 3 years ago
parent
commit
c7850df186

+ 1 - 1
Classes/GlobalStateExplorers/FLEXObjectListViewController.m

@@ -228,7 +228,7 @@ NSString const * FLEXTitleForObjectReferenceSection(FLEXObjectReferenceSection s
         sectionTitles:sectionTitles
     ];
     viewController.title = [NSString stringWithFormat:@"Referencing %@ %p",
-        NSStringFromClass(object_getClass(object)), object
+        [FLEXRuntimeUtility safeClassNameForObject:object], object
     ];
     return viewController;
 }

+ 1 - 1
Classes/GlobalStateExplorers/FLEXObjectRef.m

@@ -47,7 +47,7 @@
         _object = object;
         _wantsSummary = showSummary;
 
-        NSString *class = NSStringFromClass(object_getClass(object));
+        NSString *class = [FLEXRuntimeUtility safeClassNameForObject:object];
         if (ivar) {
             _reference = [NSString stringWithFormat:@"%@ %@", class, ivar];
         } else if (showSummary) {

+ 1 - 1
Classes/ObjectExplorers/FLEXObjectExplorerViewController.m

@@ -87,7 +87,7 @@
 
     // Use [object class] here rather than object_getClass
     // to avoid the KVO prefix for observed objects
-    self.title = [[self.object class] description];
+    self.title = [FLEXRuntimeUtility safeClassNameForObject:self.object];
 
     // Search
     self.showsSearchBar = YES;

+ 1 - 0
Classes/Utility/Runtime/FLEXRuntimeUtility.h

@@ -53,6 +53,7 @@
 
 /// Used to describe an object in brief within an explorer row
 + (NSString *)summaryForObject:(id)value;
++ (NSString *)safeClassNameForObject:(id)object;
 + (NSString *)safeDescriptionForObject:(id)object;
 + (NSString *)safeDebugDescriptionForObject:(id)object;
 

+ 9 - 0
Classes/Utility/Runtime/FLEXRuntimeUtility.m

@@ -96,6 +96,15 @@ typedef NS_ENUM(NSInteger, FLEXRuntimeUtilityErrorCode) {
     return superClasses;
 }
 
++ (NSString *)safeClassNameForObject:(id)object {
+    // Don't assume that we have an NSObject subclass
+    if ([self safeObject:object respondsToSelector:@selector(class)]) {
+        return NSStringFromClass([object class]);
+    }
+
+    return NSStringFromClass(object_getClass(object));
+}
+
 /// Could be nil
 + (NSString *)safeDescriptionForObject:(id)object {
     // Don't assume that we have an NSObject subclass; not all objects respond to -description