You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
3.1 KiB

  1. //
  2. // FLEXObjectExplorerFactory.m
  3. // Flipboard
  4. //
  5. // Created by Ryan Olson on 5/15/14.
  6. // Copyright (c) 2014 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXObjectExplorerFactory.h"
  9. #import "FLEXObjectExplorerViewController.h"
  10. #import "FLEXArrayExplorerViewController.h"
  11. #import "FLEXSetExplorerViewController.h"
  12. #import "FLEXDictionaryExplorerViewController.h"
  13. #import "FLEXDefaultsExplorerViewController.h"
  14. #import "FLEXViewControllerExplorerViewController.h"
  15. #import "FLEXViewExplorerViewController.h"
  16. #import "FLEXImageExplorerViewController.h"
  17. #import "FLEXClassExplorerViewController.h"
  18. #import "FLEXLayerExplorerViewController.h"
  19. #import "FLEXColorExplorerViewController.h"
  20. #import <objc/runtime.h>
  21. @implementation FLEXObjectExplorerFactory
  22. + (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object
  23. {
  24. // Bail for nil object. We can't explore nil.
  25. if (!object) {
  26. return nil;
  27. }
  28. static NSDictionary<NSString *, Class> *explorerSubclassesForObjectTypeStrings = nil;
  29. static dispatch_once_t once;
  30. dispatch_once(&once, ^{
  31. explorerSubclassesForObjectTypeStrings = @{NSStringFromClass([NSArray class]) : [FLEXArrayExplorerViewController class],
  32. NSStringFromClass([NSSet class]) : [FLEXSetExplorerViewController class],
  33. NSStringFromClass([NSDictionary class]) : [FLEXDictionaryExplorerViewController class],
  34. NSStringFromClass([NSUserDefaults class]) : [FLEXDefaultsExplorerViewController class],
  35. NSStringFromClass([UIViewController class]) : [FLEXViewControllerExplorerViewController class],
  36. NSStringFromClass([UIView class]) : [FLEXViewExplorerViewController class],
  37. NSStringFromClass([UIImage class]) : [FLEXImageExplorerViewController class],
  38. NSStringFromClass([CALayer class]) : [FLEXLayerExplorerViewController class],
  39. NSStringFromClass([UIColor class]) : [FLEXColorExplorerViewController class]
  40. };
  41. });
  42. Class explorerClass = nil;
  43. BOOL objectIsClass = class_isMetaClass(object_getClass(object));
  44. if (objectIsClass) {
  45. explorerClass = [FLEXClassExplorerViewController class];
  46. } else {
  47. explorerClass = [FLEXObjectExplorerViewController class];
  48. for (NSString *objectTypeString in explorerSubclassesForObjectTypeStrings) {
  49. Class objectClass = NSClassFromString(objectTypeString);
  50. if ([object isKindOfClass:objectClass]) {
  51. explorerClass = explorerSubclassesForObjectTypeStrings[objectTypeString];
  52. break;
  53. }
  54. }
  55. }
  56. FLEXObjectExplorerViewController *explorerViewController = [[explorerClass alloc] init];
  57. explorerViewController.object = object;
  58. return explorerViewController;
  59. }
  60. @end