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

//
// 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