| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- //
- // FLEXObjectExplorerFactory.m
- // Flipboard
- //
- // Created by Ryan Olson on 5/15/14.
- // Copyright (c) 2014 Flipboard. All rights reserved.
- //
- #import "FLEXObjectExplorerFactory.h"
- #import "FLEXObjectExplorerViewController.h"
- #import "FLEXArrayExplorerViewController.h"
- #import "FLEXSetExplorerViewController.h"
- #import "FLEXDictionaryExplorerViewController.h"
- #import "FLEXDefaultsExplorerViewController.h"
- #import "FLEXViewControllerExplorerViewController.h"
- #import "FLEXViewExplorerViewController.h"
- #import "FLEXImageExplorerViewController.h"
- #import "FLEXClassExplorerViewController.h"
- #import "FLEXLayerExplorerViewController.h"
- #import "FLEXColorExplorerViewController.h"
- #import "FLEXBundleExplorerViewController.h"
- #import <objc/runtime.h>
- @implementation FLEXObjectExplorerFactory
- + (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object
- {
- // Bail for nil object. We can't explore nil.
- if (!object) {
- return nil;
- }
-
- static NSDictionary<NSString *, Class> *explorerSubclassesForObjectTypeStrings = nil;
- static dispatch_once_t once;
- dispatch_once(&once, ^{
- explorerSubclassesForObjectTypeStrings = @{NSStringFromClass([NSArray class]) : [FLEXArrayExplorerViewController class],
- NSStringFromClass([NSSet class]) : [FLEXSetExplorerViewController class],
- NSStringFromClass([NSDictionary class]) : [FLEXDictionaryExplorerViewController class],
- NSStringFromClass([NSUserDefaults class]) : [FLEXDefaultsExplorerViewController class],
- NSStringFromClass([UIViewController class]) : [FLEXViewControllerExplorerViewController class],
- NSStringFromClass([UIView class]) : [FLEXViewExplorerViewController class],
- NSStringFromClass([UIImage class]) : [FLEXImageExplorerViewController class],
- NSStringFromClass([CALayer class]) : [FLEXLayerExplorerViewController class],
- NSStringFromClass([UIColor class]) : [FLEXColorExplorerViewController class],
- NSStringFromClass([NSBundle class]) : [FLEXBundleExplorerViewController class],
- };
- });
-
- Class explorerClass = nil;
- BOOL objectIsClass = class_isMetaClass(object_getClass(object));
- if (objectIsClass) {
- explorerClass = [FLEXClassExplorerViewController class];
- } else {
- explorerClass = [FLEXObjectExplorerViewController class];
- for (NSString *objectTypeString in explorerSubclassesForObjectTypeStrings) {
- Class objectClass = NSClassFromString(objectTypeString);
- if ([object isKindOfClass:objectClass]) {
- explorerClass = explorerSubclassesForObjectTypeStrings[objectTypeString];
- break;
- }
- }
- }
-
- FLEXObjectExplorerViewController *explorerViewController = [[explorerClass alloc] init];
- explorerViewController.object = object;
-
- return explorerViewController;
- }
- @end
|