Permalink
Browse files

SNRHUD addition, noodlekit, nsobject refactoring, code cleanup, basem…

…odel category additions, nice introspection and KVO stuff.
  • Loading branch information...
1 parent a55ad5f commit a69919e80a00a34688809bd3a92e3bd79b7ea9a9 @mralexgray committed Apr 10, 2013
Showing with 5,390 additions and 4,220 deletions.
  1. +5 −0 .gitmodules
  2. +5 −5 AtoZ/AZGeometry/AtoZGeometry.h
  3. +3 −3 AtoZ/AZGeometry/AtoZGeometry.m
  4. +47 −37 AtoZ/AtoZ-Framework.pch
  5. +64 −11 AtoZ/AtoZ.h
  6. +165 −58 AtoZ/AtoZ.m
  7. +264 −83 AtoZ/AtoZ.xcodeproj/project.pbxproj
  8. +152 −89 AtoZ/AtoZCLI/main.m
  9. +3 −0 AtoZ/AtoZFunctions.h
  10. +83 −63 AtoZ/AtoZFunctions.m
  11. +1 −1 AtoZ/AtoZTestBed/ColorVC.m
  12. +3 −3 AtoZ/AtoZTestBed/TUIVVC.m
  13. +2 −2 AtoZ/AtoZTestBed/TestBedDelegate.h
  14. +21 −21 AtoZ/AtoZTestBed/TestBedDelegate.m
  15. +172 −126 AtoZ/AtoZUmbrella.h
  16. +1 −1 AtoZ/Categories/CAAnimation+AtoZ.m
  17. +11 −6 AtoZ/Categories/CALayer+AtoZ.h
  18. +13 −9 AtoZ/Categories/CALayer+AtoZ.m
  19. +1 −1 AtoZ/Categories/NSArray+AtoZ.h
  20. +45 −44 AtoZ/Categories/NSArray+AtoZ.m
  21. +1 −1 AtoZ/Categories/NSBezierPath+AtoZ.h
  22. +8 −4 AtoZ/Categories/NSBezierPath+AtoZ.m
  23. +9 −1 AtoZ/Categories/NSBundle+AtoZ.h
  24. +48 −6 AtoZ/Categories/NSBundle+AtoZ.m
  25. +51 −51 AtoZ/Categories/NSCell+AtoZ.m
  26. +3 −0 AtoZ/Categories/NSColor+AtoZ.h
  27. +16 −11 AtoZ/Categories/NSColor+AtoZ.m
  28. +33 −33 AtoZ/Categories/NSDate+AtoZ.m
  29. +38 −38 AtoZ/Categories/NSDictionary+AtoZ.m
  30. +10 −10 AtoZ/Categories/NSEvent+AtoZ.m
  31. +10 −9 AtoZ/Categories/NSImage+AtoZ.h
  32. +31 −28 AtoZ/Categories/NSImage+AtoZ.m
  33. +0 −18 AtoZ/Categories/NSIndexSet+AtoZ.h
  34. +1 −63 AtoZ/Categories/NSIndexSet+AtoZ.m
  35. +19 −19 AtoZ/Categories/NSNumber+AtoZ.m
  36. +17 −9 AtoZ/Categories/NSObject+AtoZ.h
  37. +65 −32 AtoZ/Categories/NSObject+AtoZ.m
  38. +26 −61 AtoZ/Categories/NSObject+Properties.h
  39. +160 −232 AtoZ/Categories/NSObject+Properties.m
  40. +5 −5 AtoZ/Categories/NSObject-Utilities.h
  41. +2 −2 AtoZ/Categories/NSObject-Utilities.m
  42. +9 −9 AtoZ/Categories/NSSplitView+DMAdditions.h
  43. +47 −47 AtoZ/Categories/NSSplitView+DMAdditions.m
  44. +21 −19 AtoZ/Categories/NSString+AtoZ.h
  45. +353 −345 AtoZ/Categories/NSString+AtoZ.m
  46. +0 −181 AtoZ/Categories/NSTableView+AtoZ.h
  47. +1,053 −1,053 AtoZ/Categories/NSTableView+AtoZ.m
  48. +17 −17 AtoZ/Categories/NSTask+OneLineTasksWithOutput.m
  49. +4 −4 AtoZ/Categories/NSURL+AtoZ.m
  50. +21 −21 AtoZ/Categories/NSView+AtoZ.h
  51. +3 −3 AtoZ/Categories/NSView+AtoZ.m
  52. +3 −3 AtoZ/Categories/NSWindow+AtoZ.h
  53. +5 −5 AtoZ/Categories/NSWindow+AtoZ.m
  54. +22 −22 AtoZ/Categories/WebView+AtoZ.m
  55. +1 −1 AtoZ/Classes/AZFavIconManager.h
  56. +3 −3 AtoZ/Classes/AZFavIconManager.m
  57. +2 −2 AtoZ/Classes/AZHomeBrew.h
  58. +14 −14 AtoZ/Classes/AZHomeBrew.m
  59. +4 −4 AtoZ/Classes/AZLayer.m
  60. +1 −1 AtoZ/Classes/AZSizer.h
  61. +8 −8 AtoZ/Classes/AZSizer.m
  62. +1 −1 AtoZ/Classes/AZSpeechRecognition.m
  63. +1 −1 AtoZ/Classes/AZStopwatch.h
  64. +3 −3 AtoZ/Classes/AZStopwatch.m
  65. +4 −4 AtoZ/Classes/AZWeakCollections.m
  66. +14 −14 AtoZ/Classes/AddressBookImageLoader.m
  67. +11 −11 AtoZ/Classes/AtoZGridView.h
  68. +64 −64 AtoZ/Classes/AtoZGridView.m
  69. +1 −1 AtoZ/Classes/AtoZWebSnapper.m
  70. +1 −1 AtoZ/Classes/AtoZWebSnapperWindowController.h
  71. +1 −1 AtoZ/Classes/AtoZWebSnapperWindowController.m
  72. +1 −1 AtoZ/Classes/BlocksAdditions.h
  73. +5 −5 AtoZ/Classes/HTMLNode.m
  74. +6 −6 AtoZ/Classes/HTMLParserViewController.m
  75. +3 −3 AtoZ/Classes/NSOrderedDictionary.h
  76. +531 −531 AtoZ/Classes/NSOrderedDictionary.m
  77. +29 −0 AtoZ/Controls/SNRHUDKit/SNRHUDButtonCell.h
  78. +201 −0 AtoZ/Controls/SNRHUDKit/SNRHUDButtonCell.m
  79. +13 −0 AtoZ/Controls/SNRHUDKit/SNRHUDImageCell.h
  80. +13 −0 AtoZ/Controls/SNRHUDKit/SNRHUDImageCell.m
  81. +15 −0 AtoZ/Controls/SNRHUDKit/SNRHUDScrollView.h
  82. +21 −0 AtoZ/Controls/SNRHUDKit/SNRHUDScrollView.m
  83. +15 −0 AtoZ/Controls/SNRHUDKit/SNRHUDSegmentedCell.h
  84. +211 −0 AtoZ/Controls/SNRHUDKit/SNRHUDSegmentedCell.m
  85. +13 −0 AtoZ/Controls/SNRHUDKit/SNRHUDTextFieldCell.h
  86. +98 −0 AtoZ/Controls/SNRHUDKit/SNRHUDTextFieldCell.m
  87. +13 −0 AtoZ/Controls/SNRHUDKit/SNRHUDTextView.h
  88. +77 −0 AtoZ/Controls/SNRHUDKit/SNRHUDTextView.m
  89. +15 −0 AtoZ/Controls/SNRHUDKit/SNRHUDWindow.h
  90. +232 −0 AtoZ/Controls/SNRHUDKit/SNRHUDWindow.m
  91. +8 −8 AtoZ/Core/AssetCollection.m
  92. +8 −8 AtoZ/Core/CAScrollView.m
  93. +4 −4 AtoZ/Core/PythonOperation.h
  94. +47 −47 AtoZ/Core/PythonOperation.m
  95. +6 −6 AtoZ/DockBox/AZHTTPRouter.m
  96. +4 −4 AtoZ/DockBox/DockBox.m
  97. +1 −1 AtoZ/Models/AtoZModels.h
  98. +2 −2 AtoZ/Models/AtoZModels.m
  99. +4 −4 AtoZ/Models/Bootstrap.h
  100. +7 −7 AtoZ/Models/Bootstrap.m
  101. +4 −4 AtoZ/Models/JsonElement.h
  102. +126 −126 AtoZ/Models/JsonElement.m
  103. +24 −24 AtoZ/Models/MediaServer.m
  104. +11 −11 AtoZ/Protocols/AZHTTPURLProtocol.m
  105. +1 −1 AtoZ/SpeechConverter/SpeechConverter/GoogleTTS.m
  106. +7 −7 AtoZ/SpeechConverter/SpeechConverterTests/SpeechConverterTests.m
  107. +2 −2 AtoZ/Views/AZASIMGV.m
  108. +143 −173 AtoZ/Views/AZBackgroundProgressBar.m
  109. +1 −1 AtoZ/Views/AZBlockView.h
  110. +3 −3 AtoZ/Views/AZBorderlessResizeWindow.m
  111. +28 −28 AtoZ/Views/AZPropellerView.m
  112. +3 −3 AtoZ/Views/AZToggleArrayView.h
  113. +3 −3 AtoZ/Views/AZToggleArrayView.m
  114. +6 −6 AtoZ/Views/AZTrackingWindow.m
  115. +13 −13 AtoZ/Views/AZVeil.m
  116. +14 −14 AtoZ/Views/BBMeshView.m
  117. +4 −4 AtoZ/Views/ConcurrentOperation.m
  118. +7 −7 AtoZ/Views/OperationsRunner.m
  119. +7 −10 AtoZ/Views/TUIVs/AZExpandableView.h
  120. +69 −80 AtoZ/Views/TUIVs/AZExpandableView.m
  121. +4 −4 AtoZ/Views/iCarousel.h
  122. +1 −0 Frameworks/NoodleKit
View
@@ -166,3 +166,8 @@
path = Frameworks/nu
url = https://github.com/mralexgray/nu.git
ignore = dirty
+[submodule "Frameworks/NoodleKit"]
+ path = Frameworks/NoodleKit
+ url = https://github.com/mralexgray/NoodleKit.git
+ ignore = dirty
+
@@ -32,9 +32,9 @@ id nanCheck ( NSV* point );
BOOL AZEqualRects ( NSR r1, NSR r2 );
-NSNumber *iNum ( NSI i );
+NSNumber *iNum ( NSI i );
NSNumber *uNum ( NSUI ui );
-NSNumber *fNum ( CGF f );
+NSNumber *fNum ( CGF f );
NSNumber *dNum ( double d );
FOUNDATION_EXPORT const CGP AZAnchorTop;
@@ -385,7 +385,7 @@ NSR AZRectFlippedOnEdge(NSRect r, AZPOS position);
FOUNDATION_EXPORT NSR AZInsetRectInPosition ( NSR outside, NSSZ inset, AZPOS pos );
FOUNDATION_EXPORT AZPOS AZPosOfPointInInsetRects ( NSP point, NSR outside, NSSZ inset );
-FOUNDATION_EXPORT BOOL AZPointIsInInsetRects ( NSP point, NSR outside, NSSZ inset );
+FOUNDATION_EXPORT BOOL AZPointIsInInsetRects ( NSP point, NSR outside, NSSZ inset );
static inline AZInsetRects AZMakeInsideRects(NSRect rect, NSSZ inset) {
@@ -416,8 +416,8 @@ BOOL AZIsPointBelowRect ( NSP point, NSR rect );
BOOL AZIsRectLeftOfRect ( NSR rect, NSR compare );
BOOL AZIsRectRightOfRect ( NSR rect, NSR compare );
-BOOL AZIsRectAboveRect ( NSR rect, NSR compare );
-BOOL AZIsRectBelowRect ( NSR rect, NSR compare );
+BOOL AZIsRectAboveRect ( NSR rect, NSR compare );
+BOOL AZIsRectBelowRect ( NSR rect, NSR compare );
NSR rectZoom ( NSR rect,float zoom,int quadrant );
NSR AZSquareInRect ( NSR rect );
@@ -214,7 +214,7 @@ AZPOS AZPositionOfRectAtOffsetInsidePerimeterOfRect(NSR inner, CGF offset, NSR o
outsz.width == offset ? AZPositionBottomRight :
offset == 0 || offset == AZPerimeter(outer) ? AZPositionBottomLeft :
outsz.width + outsz.height == offset ? AZPositionTopRight :
- offset == AZPerimeter(outer) - outsz.height ? AZPositionTopLeft :
+ offset == AZPerimeter(outer) - outsz.height ? AZPositionTopLeft :
outsz.width > offset //? offset < inner.size.width
//? AZPositionBottomLeft
//: offset > outsz.width - inner.size.width
@@ -927,7 +927,7 @@ NSR AZRectInsideRectOnEdge(NSRect center, NSR outer, AZPOS position) {
: AZRectExceptOriginX(center, outer.origin.x );
}
-FOUNDATION_EXPORT BOOL AZPointIsInInsetRects ( NSP point, NSR outside, NSSZ inset ) {
+FOUNDATION_EXPORT BOOL AZPointIsInInsetRects ( NSP point, NSR outside, NSSZ inset ) {
AZInsetRects e = AZMakeInsideRects(outside, inset);
return NSPInRect(point, e.top) ?:
NSPInRect(point, e.right) ?:
@@ -1068,7 +1068,7 @@ NSR quadrant(NSR r, AZQuadrant quad)
NSR newR = AZRectBy(half.width, half.height);
NSP p = quad == AZTopLeftQuad ? (NSP) { 0, half.height }
: quad == AZTopRightQuad ? (NSP) { half.width, half.height }
- : quad == AZBotRightQuad ? (NSP) { half.width, 0 }
+ : quad == AZBotRightQuad ? (NSP) { half.width, 0 }
: NSZeroPoint;
return AZOffsetRect(newR, p);
View
@@ -5,6 +5,42 @@
#import <dirent.h>
#import <sys/stat.h>
#import <Foundation/Foundation.h>
+#import <Availability.h>
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED
+#import <SystemConfiguration/SystemConfiguration.h>
+#import <MobileCoreServices/MobileCoreServices.h>
+#else
+#import <SystemConfiguration/SystemConfiguration.h>
+#import <CoreServices/CoreServices.h>
+#endif
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IPHONE
+#import <MobileCoreServices/MobileCoreServices.h>
+#import <sys/xattr.h>
+#else
+#import <CoreServices/CoreServices.h>
+#endif
+
+
+#define NSLog(fmt...) _AZColorLog(nil,__FILE__,__LINE__,__PRETTY_FUNCTION__,fmt)
+
+#import <xpc/xpc.h>
+#import <Cocoa/Cocoa.h>
+#import <objc/message.h>
+#import <objc/runtime.h>
+#import <Quartz/Quartz.h>
+#import <Carbon/Carbon.h>
+#import <AppKit/AppKit.h>
+#import <Security/Security.h>
+#import <QuartzCore/QuartzCore.h>
+#import <Foundation/Foundation.h>
+#import <AudioToolbox/AudioToolbox.h>
+#import <AVFoundation/AVFoundation.h>
+#import <CoreFoundation/CoreFoundation.h>
+#import <ApplicationServices/ApplicationServices.h>
+
#ifndef ah_retain
@@ -108,41 +144,6 @@ __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_7))
//#undef SYNTHESIZE_CONSTS
-#import <Availability.h>
-
-#if __IPHONE_OS_VERSION_MIN_REQUIRED
-#import <SystemConfiguration/SystemConfiguration.h>
-#import <MobileCoreServices/MobileCoreServices.h>
-#else
-#import <SystemConfiguration/SystemConfiguration.h>
-#import <CoreServices/CoreServices.h>
-#endif
-
-#import <TargetConditionals.h>
-#if TARGET_OS_IPHONE
-#import <MobileCoreServices/MobileCoreServices.h>
-#import <sys/xattr.h>
-#else
-#import <CoreServices/CoreServices.h>
-#endif
-
-
-
-#import <xpc/xpc.h>
-#import <Cocoa/Cocoa.h>
-#import <objc/message.h>
-#import <objc/runtime.h>
-#import <Quartz/Quartz.h>
-#import <Carbon/Carbon.h>
-#import <AppKit/AppKit.h>
-#import <Security/Security.h>
-#import <QuartzCore/QuartzCore.h>
-#import <Foundation/Foundation.h>
-#import <AudioToolbox/AudioToolbox.h>
-#import <AVFoundation/AVFoundation.h>
-#import <CoreFoundation/CoreFoundation.h>
-#import <ApplicationServices/ApplicationServices.h>
-
//#define EXCLUDE_STUB_PROTOTYPES 1
//#import <PLWeakCompatibility/PLWeakCompatibilityStubs.h>
@@ -151,7 +152,9 @@ __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_7))
#import <DrawKit/DKDrawKit.h>
//#import <MapKit/MapKit.h>
//
-//#import <Zangetsu/Zangetsu.h>
+//#import <Nu/Nu.h>
+#import <KSHTMLWriterFramework/KSHTMLWriterFramework.h>
+#import <Zangetsu/Zangetsu.h>
#import <BlocksKit/BlocksKit.h>
#import <CocoaPuffs/CocoaPuffs.h>
#import <AtoZBezierPath/AtoZBezierPath.h>
@@ -172,7 +175,14 @@ __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_7))
#import "AtoZUmbrella.h"
#import "AtoZGeometry.h"
#import "AtoZFunctions.h"
-#import "AtoZ.h"
+//#import "AtoZ.h"
+#import "SNRHUDButtonCell.h"
+#import "SNRHUDImageCell.h"
+#import "SNRHUDScrollView.h"
+#import "SNRHUDSegmentedCell.h"
+#import "SNRHUDTextFieldCell.h"
+#import "SNRHUDTextView.h"
+#import "SNRHUDWindow.h"
#endif
View
@@ -69,27 +69,36 @@
//#import <Growl/Growl.h>
//#import "Nu.h"
+// ARC is compatible with iOS 4.0 upwards, but you need at least Xcode 4.2 with Clang LLVM 3.0 to compile it.
+//#if !__has_feature(objc_arc)
+//#error This project must be compiled with ARC (Xcode 4.2+ with LLVM 3.0 and above)
+//#endif
-#define EXCLUDE_STUB_PROTOTYPES 1
-#import <PLWeakCompatibility/PLWeakCompatibilityStubs.h>
+
+//#define EXCLUDE_STUB_PROTOTYPES 1
+//#import <PLWeakCompatibility/PLWeakCompatibilityStubs.h>
#import <BlocksKit/BlocksKit.h>
#import <CocoaPuffs/CocoaPuffs.h>
#import <CocoatechCore/CocoatechCore.h>
#import <DrawKit/DKDrawKit.h>
#import <FunSize/FunSize.h>
#import <Lumberjack/Lumberjack.h>
+#import <KSHTMLWriterFramework/KSHTMLWriterFramework.h>
#import <MapKit/MapKit.h>
-#import <Nu/Nu.h>
+#import <NoodleKit/NoodleKit.h>
+//#import <Nu/Nu.h>
#import <PhFacebook/PhFacebook.h>
#import <Rebel/Rebel.h>
-//#import <SNRHUDKit/SNRHUDKit.h>
+
#import <TwUI/TUIKit.h>
#import <Zangetsu/Zangetsu.h>
#import <AtoZBezierPath/AtoZBezierPath.h>
#import <AtoZAppKit/BGHUDAppKit.h>
+#import "AtoZUmbrella.h"
+
//#import <AtoZUI/AtoZUI.h>
//#import <RMKit/RMKit.h>
//#import <NanoStore/NanoStore.h>
@@ -297,6 +306,16 @@ static const int ddLogLevel = LOG_LEVEL_VERBOSE;
/* CONTROLS */
#import "AZToggleArrayView.h"
#import "AZDarkButtonCell.h"
+//#import "SNRHUDKit.h"
+#import "SNRHUDButtonCell.h"
+#import "SNRHUDImageCell.h"
+#import "SNRHUDScrollView.h"
+#import "SNRHUDSegmentedCell.h"
+#import "SNRHUDTextFieldCell.h"
+#import "SNRHUDTextView.h"
+#import "SNRHUDWindow.h"
+
+
/* WINDOWS */
#import "AZAttachedWindow.h"
@@ -374,7 +393,7 @@ static const int ddLogLevel = LOG_LEVEL_VERBOSE;
You can use it as
FilterBlock fb1 = ^id(id element, NSUInteger idx, BOOL *stop){ if ([element isEqualToString:@"YES"]) { NSLog(@"You did it"); *stop = YES;} return element;};
- FilterBlock fb2 = ^id(id element, NSUInteger idx, BOOL *stop){ if ([element isEqualToString:@"NO"] ) { NSLog(@"Nope"); *stop = YES;} return element;};
+ FilterBlock fb2 = ^id(id element, NSUInteger idx, BOOL *stop){ if ([element isEqualToString:@"NO"] ) { NSLog(@"Nope"); *stop = YES;} return element;};
NSArray *filter = @[ fb1, fb2 ];
NSArray *inputArray = @[@"NO",@"YES"];
@@ -496,7 +515,7 @@ typedef void (^asyncTaskCallback)(AZTaskResponder *response);
+ (AZPOS) positionForString: (NSS*)strVal;
+ (NSS*) stringForPosition:(AZPOS)enumVal;
-+ (NSS*) stringForType: (id)type;
++ (NSS*) stringForType: (id)type;
//+ (NSFont*) fontWithSize: (CGFloat) fontSize;
//- (NSFont*) registerFonts:(CGFloat)size;
@@ -514,7 +533,7 @@ typedef void (^asyncTaskCallback)(AZTaskResponder *response);
/*@property (strong, nonatomic) NSLogConsole *console;
- (id)objectForKeyedSubscript:(NSString *)key; - (void)setObject:(id)newValue forKeyedSubscription:(NSString *)key; */
-- (void) performBlock:(VoidBlock)block;
+//- (void) performBlock:(VoidBlock)block;
- (void) performBlock:(VoidBlock)block waitUntilDone:(BOOL)wait;
+ (void) playNotificationSound: (NSD*)apsDictionary;
@@ -525,9 +544,9 @@ typedef void (^asyncTaskCallback)(AZTaskResponder *response);
+ (void) say:(NSS*)thing;
-+ (CGF) clamp: (CGF)value from:(CGF)minimum to:(CGF)maximum;
-+ (CGF) scaleForSize: (CGS)size inRect:(CGR)rect;
-+ (CGR) centerSize: (CGS)size inRect:(CGR)rect;
++ (CGF) clamp: (CGF)value from:(CGF)minimum to:(CGF)maximum;
++ (CGF) scaleForSize: (CGS)size inRect:(CGR)rect;
++ (CGR) centerSize: (CGS)size inRect:(CGR)rect;
+ (CGP) centerOfRect: (CGR)rect;
+ (NSR) rectFromPointA:(NSP)pointA andPointB:(NSP)pointB;
+ (void) printRect: (NSR)toPrint;
@@ -540,10 +559,44 @@ typedef void (^asyncTaskCallback)(AZTaskResponder *response);
@end
+typedef void (^KVOLastChangedBlock)( NSS *whatKeyChanged, id whichInstance, id newVal);
+
@interface BaseModel (AtoZ)
-@property (NATOM, CP) NSString *uniqueID;
+
+
++ (instancetype) objectAtIndex:(NSUI)idx;
+
++ (void) setLastChangedBlock:(KVOLastChangedBlock)lastChangedBlock;
+
+// Shared instance is the object modified after each key change
+// After being notified of change to the shared instance, call this to get last modified key of last modified instance
++ (instancetype) lastModifiedInstance;
++ (NSS*) lastModifiedKey;
++ (void) setLastModifiedKey:(NSS*)key forInstance:(id)object;
+
+- (id) valueForUndefinedKey:(NSString *)key;
+
+//+ (instancetype) swizzleInstanceWithObject:(id)obj;
+- (void) swizzleSave;
+
+@property (RONLY) NSString *uniqueID;
+- (NSS*) uniqueID;
+
+@property (RONLY) NSA *superProperties;
+@property (RONLY) NSUI instanceNumber;
+- (NSUI) instanceNumber;
++ (NSUI) instances;
+
+
@property (NATOM, ASS) BOOL convertToXML;
+ (NSS*)saveFilePath;
+
+
+- (id)objectAtIndexedSubscript:(NSUInteger)idx;
+- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
+- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
+- (id)objectForKeyedSubscript:(id)key;
+
@end
//
Oops, something went wrong.

0 comments on commit a69919e

Please sign in to comment.