FLEXObjectExplorerFactory.m 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. @implementation FLEXObjectExplorerFactory
  18. + (FLEXObjectExplorerViewController *)explorerViewControllerForObject:(id)object
  19. {
  20. // Bail for nil object. We can't explore nil.
  21. if (!object) {
  22. return nil;
  23. }
  24. static NSDictionary *explorerSubclassesForObjectTypeStrings = nil;
  25. static dispatch_once_t once;
  26. dispatch_once(&once, ^{
  27. explorerSubclassesForObjectTypeStrings = @{NSStringFromClass([NSArray class]) : [FLEXArrayExplorerViewController class],
  28. NSStringFromClass([NSSet class]) : [FLEXSetExplorerViewController class],
  29. NSStringFromClass([NSDictionary class]) : [FLEXDictionaryExplorerViewController class],
  30. NSStringFromClass([NSUserDefaults class]) : [FLEXDefaultsExplorerViewController class],
  31. NSStringFromClass([UIViewController class]) : [FLEXViewControllerExplorerViewController class],
  32. NSStringFromClass([UIView class]) : [FLEXViewExplorerViewController class],
  33. NSStringFromClass([UIImage class]) : [FLEXImageExplorerViewController class]};
  34. });
  35. Class explorerClass = [FLEXObjectExplorerViewController class];
  36. for (NSString *objectTypeString in explorerSubclassesForObjectTypeStrings) {
  37. Class objectClass = NSClassFromString(objectTypeString);
  38. if ([object isKindOfClass:objectClass]) {
  39. explorerClass = [explorerSubclassesForObjectTypeStrings objectForKey:objectTypeString];
  40. break;
  41. }
  42. }
  43. FLEXObjectExplorerViewController *explorerViewController = [[explorerClass alloc] init];
  44. explorerViewController.object = object;
  45. return explorerViewController;
  46. }
  47. @end