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.
127 lines
3.5 KiB
127 lines
3.5 KiB
//
|
|
// FLEXClassExplorerViewController.m
|
|
// Flipboard
|
|
//
|
|
// Created by Ryan Olson on 6/18/14.
|
|
// Copyright (c) 2014 Flipboard. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXClassExplorerViewController.h"
|
|
#import "FLEXMethodCallingViewController.h"
|
|
#import "FLEXInstancesTableViewController.h"
|
|
|
|
typedef NS_ENUM(NSUInteger, FLEXClassExplorerRow) {
|
|
FLEXClassExplorerRowNew,
|
|
FLEXClassExplorerRowAlloc,
|
|
FLEXClassExplorerRowLiveInstances
|
|
};
|
|
|
|
@interface FLEXClassExplorerViewController ()
|
|
|
|
@property (nonatomic, readonly) Class theClass;
|
|
|
|
@end
|
|
|
|
@implementation FLEXClassExplorerViewController
|
|
|
|
- (Class)theClass
|
|
{
|
|
Class theClass = Nil;
|
|
if (class_isMetaClass(object_getClass(self.object))) {
|
|
theClass = self.object;
|
|
}
|
|
return theClass;
|
|
}
|
|
|
|
#pragma mark - Superclass Overrides
|
|
|
|
- (NSArray<NSNumber *> *)possibleExplorerSections
|
|
{
|
|
// Move class methods to between our custom section and the properties section since
|
|
// we are more interested in the class sections than in the instance level sections.
|
|
NSMutableArray<NSNumber *> *mutableSections = [[super possibleExplorerSections] mutableCopy];
|
|
[mutableSections removeObject:@(FLEXObjectExplorerSectionClassMethods)];
|
|
[mutableSections insertObject:@(FLEXObjectExplorerSectionClassMethods) atIndex:[mutableSections indexOfObject:@(FLEXObjectExplorerSectionProperties)]];
|
|
return mutableSections;
|
|
}
|
|
|
|
- (NSString *)customSectionTitle
|
|
{
|
|
return @"Shortcuts";
|
|
}
|
|
|
|
- (NSArray *)customSectionRowCookies
|
|
{
|
|
NSMutableArray *cookies = [NSMutableArray array];
|
|
if ([self.theClass respondsToSelector:@selector(new)]) {
|
|
[cookies addObject:@(FLEXClassExplorerRowNew)];
|
|
}
|
|
if ([self.theClass respondsToSelector:@selector(alloc)]) {
|
|
[cookies addObject:@(FLEXClassExplorerRowAlloc)];
|
|
}
|
|
[cookies addObject:@(FLEXClassExplorerRowLiveInstances)];
|
|
return cookies;
|
|
}
|
|
|
|
- (NSString *)customSectionTitleForRowCookie:(id)rowCookie
|
|
{
|
|
NSString *title = nil;
|
|
FLEXClassExplorerRow row = [rowCookie unsignedIntegerValue];
|
|
switch (row) {
|
|
case FLEXClassExplorerRowNew:
|
|
title = @"+ (id)new";
|
|
break;
|
|
|
|
case FLEXClassExplorerRowAlloc:
|
|
title = @"+ (id)alloc";
|
|
break;
|
|
|
|
case FLEXClassExplorerRowLiveInstances:
|
|
title = @"Live Instances";
|
|
break;
|
|
}
|
|
return title;
|
|
}
|
|
|
|
- (NSString *)customSectionSubtitleForRowCookie:(id)rowCookie
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (UIViewController *)customSectionDrillInViewControllerForRowCookie:(id)rowCookie
|
|
{
|
|
UIViewController *drillInViewController = nil;
|
|
FLEXClassExplorerRow row = [rowCookie unsignedIntegerValue];
|
|
switch (row) {
|
|
case FLEXClassExplorerRowNew:
|
|
drillInViewController = [[FLEXMethodCallingViewController alloc] initWithTarget:self.theClass method:class_getClassMethod(self.theClass, @selector(new))];
|
|
break;
|
|
|
|
case FLEXClassExplorerRowAlloc:
|
|
drillInViewController = [[FLEXMethodCallingViewController alloc] initWithTarget:self.theClass method:class_getClassMethod(self.theClass, @selector(alloc))];
|
|
break;
|
|
|
|
case FLEXClassExplorerRowLiveInstances:
|
|
drillInViewController = [FLEXInstancesTableViewController instancesTableViewControllerForClassName:NSStringFromClass(self.theClass)];
|
|
break;
|
|
}
|
|
return drillInViewController;
|
|
}
|
|
|
|
- (BOOL)shouldShowDescription
|
|
{
|
|
// Redundant with our title.
|
|
return NO;
|
|
}
|
|
|
|
- (BOOL)canCallInstanceMethods
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (BOOL)canHaveInstanceState
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
@end
|