FLEXObjectExplorerFactory.m 1.9 KB

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