Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
BB9z committed Sep 18, 2018
2 parents 2d267c6 + 63a498d commit f10323a
Show file tree
Hide file tree
Showing 19 changed files with 156 additions and 45 deletions.
31 changes: 23 additions & 8 deletions .travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,31 +32,46 @@ STAGE_MAIN() {
echo "Skip pod lint"
else
echo "TRAVIS_BRANCH = $TRAVIS_BRANCH"
gem install cocoapods --no-rdoc --no-ri --no-document --quiet
# Use 1.6.0.beta as 1.5 has isuuses with Xcode 10
# todo: remove after 1.6 release
gem install cocoapods --no-rdoc --no-ri --no-document --quiet --pre
if [ "$TRAVIS_BRANCH" = "develop" ]; then
pod lib lint --allow-warnings
pod lib lint --fail-fast --allow-warnings
else
pod lib lint
pod lib lint --fail-fast
fi
fi

elif [ "$RFCI_TASK" = "Xcode9" ]; then
elif [ "$RFCI_TASK" = "Xcode10" ]; then
pod install --project-directory=Test

echo "Test for macOS and watchOS."
XC_TestMac
XC_TestWatch

echo "Test on lastest device and OS."
XC_Test "Test-iOS" "platform=iOS Simulator,name=iPhone X,OS=11.3"
XC_Test "Test-tvOS" "platform=tvOS Simulator,name=Apple TV 4K,OS=11.3"
XC_Test "Test-iOS" "platform=iOS Simulator,name=iPhone XS Max,OS=12.0"
XC_Test "Test-tvOS" "platform=tvOS Simulator,name=Apple TV 4K,OS=12.0"

echo "Test on old device and OS".
XC_Test "Test-iOS" "platform=iOS Simulator,name=iPhone 5,OS=9.0"
XC_Test "Test-tvOS" "platform=tvOS Simulator,name=Apple TV,OS=9.0"

echo "Test Swift"
XC_Test "Test-Swift" "platform=iOS Simulator,name=iPhone X,OS=11.3"
XC_Test "Test-Swift" "platform=iOS Simulator,name=iPhone SE,OS=12.0"

elif [ "$RFCI_TASK" = "Xcode9" ]; then
pod install --project-directory=Test

echo "Test for macOS and watchOS."
XC_TestMac
XC_TestWatch

XC_Test "Test-iOS" "platform=iOS Simulator,name=iPhone X,OS=11.4"
XC_Test "Test-tvOS" "platform=tvOS Simulator,name=Apple TV 4K,OS=11.4"

echo "Test Swift"
XC_Test "Test-Swift" "platform=iOS Simulator,name=iPhone X,OS=11.4"

elif [ "$RFCI_TASK" = "Xcode8" ]; then
pod install --project-directory=Test
Expand All @@ -71,7 +86,7 @@ STAGE_MAIN() {
}

STAGE_SUCCESS() {
if [ "$RFCI_TASK" = "Xcode9" ]; then
if [ "$RFCI_TASK" = "Xcode10" ]; then
curl -s https://codecov.io/bash | bash -s
fi
}
Expand Down
8 changes: 5 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ env:
- LANGUAGE=en_US.UTF-8
matrix:
include:
- osx_image: xcode9.3
- osx_image: xcode10
env: RFCI_TASK="POD_LINT"
- osx_image: xcode9.3
- osx_image: xcode10
env: RFCI_TASK="Xcode10"
- osx_image: xcode9.4
env: RFCI_TASK="Xcode9"
- osx_image: xcode8.3
env: RFCI_TASK="Xcode8"
before_install:
- pod repo update master --silent
script: travis_wait ./.travis.sh MAIN
script: travis_wait 20 ./.travis.sh MAIN
after_success: ./.travis.sh SUCCESS
after_failure: ./.travis.sh FAILURE
5 changes: 5 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# RFKit Changelog

## 2.3.0

* Fix Xcode 10 warnings.
* Update EXTKeyPathCoding.

## 2.2.1

* API Enhancements:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ RFKit is a useful toolkit for daily Cocoa development.

| RFKit Version | Minimum Xcode Version | Minimum iOS Target | Minimum macOS Target | Minimum watchOS Target | Minimum tvOS Target |
|:-------------:|:---------------------:|:-------------------:|:--------------------:|:----------------------:|:-------------------:|
| 2.0 | Xcode 8 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 2.0+ | Xcode 8 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 1.7 | Xcode 7 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 1.6 | Xcode 8 | iOS 6 | N/A | watchOS 2.0 | N/A |

Expand Down
2 changes: 1 addition & 1 deletion README~zh-hans.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ RFKit 包含一套对日常 Cocoa 开发很有帮助的工具。

| RFKit Version | Minimum Xcode Version | Minimum iOS Target | Minimum macOS Target | Minimum watchOS Target | Minimum tvOS Target |
|:-------------:|:---------------------:|:-------------------:|:--------------------:|:----------------------:|:-------------------:|
| 2.0 | Xcode 8 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 2.0+ | Xcode 8 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 1.7 | Xcode 7 | iOS 6 | macOS 10.8 | watchOS 2.0 | tvOS 9.0 |
| 1.6 | Xcode 8 | iOS 6 | N/A | watchOS 2.0 | N/A |

Expand Down
2 changes: 1 addition & 1 deletion RFKit.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'RFKit'
s.version = '2.2.1'
s.version = '2.3.0'
s.summary = 'Tool kit for daily cocoa development.'
s.homepage = 'https://github.com/BB9z/RFKit'
s.license = { :type => 'MIT', :file => 'LICENSE' }
Expand Down
8 changes: 4 additions & 4 deletions RFRuntime.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ enum {
#if !defined(UIEdgeInsets)
# define UIEdgeInsets NSEdgeInsets
#endif
#if !defined(UIEdgeInsetsInsetRect)
#if !defined(UIEdgeInsetsMake)
# define UIEdgeInsetsMake NSEdgeInsetsMake
#endif
#if !defined(UIEdgeInsetsEqual)
#if !defined(UIEdgeInsetsEqualToEdgeInsets)
# define UIEdgeInsetsEqualToEdgeInsets NSEdgeInsetsEqual
#endif
#if !defined(UIEdgeInsetsZero)
Expand Down Expand Up @@ -118,10 +118,10 @@ NSString *footerViewFramePath = @keypathClassInstance(UITableView, tableFooterVi
metamacro_if_eq(2, metamacro_argcount(__VA_ARGS__))(_rf_keypathClassInstance1_(__VA_ARGS__))(_rf_keypathClassInstance2_(__VA_ARGS__))

#define _rf_keypathClassInstance1_(CLASS, PATH)\
(({CLASS *_proxy_; ((void)(NO && ((void)_proxy_.PATH, NO)), # PATH);}))
keypath(CLASS.new, PATH)

#define _rf_keypathClassInstance2_(CLASS, PROPERTY, PATH)\
(({CLASS *_proxy_; ((void)(NO && ((void)_proxy_.PROPERTY.PATH, NO)), # PATH);}))
keypath(CLASS.new.PROPERTY, PATH)

#pragma mark - Language Addition

Expand Down
14 changes: 14 additions & 0 deletions Test/RFKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@
D5CE8EC6203FADC6000F1C0E /* NSBundle+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CE8EC4203FADC6000F1C0E /* NSBundle+RFKitTests.m */; };
D5CE8EC7203FADC6000F1C0E /* NSBundle+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5CE8EC4203FADC6000F1C0E /* NSBundle+RFKitTests.m */; };
D5D6630020B40A4200E55EEB /* UIPickerView+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5D662FF20B40A4200E55EEB /* UIPickerView+RFKitTests.m */; };
D5F4C6FC214FC34A00757CD5 /* RuntimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */; };
D5F4C6FD214FC42100757CD5 /* RuntimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */; };
D5F4C6FE214FC42200757CD5 /* RuntimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */; };
D5F4C6FF214FC42300757CD5 /* RuntimeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */; };
D5F4C702214FE1F900757CD5 /* RuntimeMacOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F4C701214FE1F900757CD5 /* RuntimeMacOSTests.m */; };
D5F50AC22035E3BA0054518C /* NSDateFormatter+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F50AC12035E3BA0054518C /* NSDateFormatter+RFKitTests.m */; };
D5F50AC32035E3BA0054518C /* NSDateFormatter+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F50AC12035E3BA0054518C /* NSDateFormatter+RFKitTests.m */; };
D5F50AC42035E3BA0054518C /* NSDateFormatter+RFKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D5F50AC12035E3BA0054518C /* NSDateFormatter+RFKitTests.m */; };
Expand Down Expand Up @@ -121,6 +126,8 @@
D5C6F5A72032D39500D1E8DF /* NSArray+RFKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSArray+RFKitTests.m"; sourceTree = "<group>"; };
D5CE8EC4203FADC6000F1C0E /* NSBundle+RFKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+RFKitTests.m"; sourceTree = "<group>"; };
D5D662FF20B40A4200E55EEB /* UIPickerView+RFKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIPickerView+RFKitTests.m"; sourceTree = "<group>"; };
D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RuntimeTests.m; sourceTree = "<group>"; };
D5F4C701214FE1F900757CD5 /* RuntimeMacOSTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RuntimeMacOSTests.m; sourceTree = "<group>"; };
D5F50AC12035E3BA0054518C /* NSDateFormatter+RFKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDateFormatter+RFKitTests.m"; sourceTree = "<group>"; };
FB69B17BD7CB0E4ADC9CB6BD /* Pods-Test-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Test-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Test-tvOS/Pods-Test-tvOS.release.xcconfig"; sourceTree = "<group>"; };
FEAF0D436A19807484DA91EC /* libPods-Target-watchOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Target-watchOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -196,6 +203,7 @@
D513B0FC2031D0BB00C62520 /* DoutTests.m */,
D57E75D5203F0051001BB427 /* RTHelper.h */,
D57E75D6203F0051001BB427 /* RTHelper.m */,
D5F4C6FB214FC34A00757CD5 /* RuntimeTests.m */,
);
path = Shared;
sourceTree = "<group>";
Expand Down Expand Up @@ -240,6 +248,7 @@
isa = PBXGroup;
children = (
D59468E5203281DE00A1AE3D /* Info.plist */,
D5F4C701214FE1F900757CD5 /* RuntimeMacOSTests.m */,
);
path = macOS;
sourceTree = "<group>";
Expand Down Expand Up @@ -617,6 +626,7 @@
D57E75CC203E9C0A001BB427 /* NSString+RFKitTests.m in Sources */,
D57E75D0203EB350001BB427 /* NSURL+RFKitTests.m in Sources */,
D501848320FC7B34009481D4 /* UINavigationController+RFKitTests.m in Sources */,
D5F4C6FC214FC34A00757CD5 /* RuntimeTests.m in Sources */,
D5297B6E208BB9F80045F1BB /* RFGeometryTests.m in Sources */,
D57E75D7203F0051001BB427 /* RTHelper.m in Sources */,
D57E75D4203EFCB7001BB427 /* UIView+RFKitTests.m in Sources */,
Expand All @@ -629,6 +639,7 @@
files = (
D5297B7E208C7FC20045F1BB /* RTHelper.m in Sources */,
D5297B79208C1FFC0045F1BB /* SwiftNameTest.swift in Sources */,
D5F4C6FF214FC42300757CD5 /* RuntimeTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -641,8 +652,10 @@
D5CE8EC6203FADC6000F1C0E /* NSBundle+RFKitTests.m in Sources */,
D59468EC2032868300A1AE3D /* NSDate+RFKitTests.m in Sources */,
D5F50AC32035E3BA0054518C /* NSDateFormatter+RFKitTests.m in Sources */,
D5F4C6FD214FC42100757CD5 /* RuntimeTests.m in Sources */,
D5722FAE203D9CE800C610E2 /* NSDictionary+RFKitTests.m in Sources */,
D5722FB2203DAC4800C610E2 /* NSError+RFKitTests.m in Sources */,
D5F4C702214FE1F900757CD5 /* RuntimeMacOSTests.m in Sources */,
D59468EB2032868000A1AE3D /* NSFileManager+RFKitTests.m in Sources */,
D57E75C7203E49CF001BB427 /* NSJSONSerialization+RFKitTests.m in Sources */,
D59468EA2032867D00A1AE3D /* NSObject+RFKitTests.m in Sources */,
Expand All @@ -662,6 +675,7 @@
D5CE8EC7203FADC6000F1C0E /* NSBundle+RFKitTests.m in Sources */,
D5C6F5A42032BB6700D1E8DF /* NSDate+RFKitTests.m in Sources */,
D5F50AC42035E3BA0054518C /* NSDateFormatter+RFKitTests.m in Sources */,
D5F4C6FE214FC42200757CD5 /* RuntimeTests.m in Sources */,
D5722FAF203D9CE800C610E2 /* NSDictionary+RFKitTests.m in Sources */,
D5722FB3203DAC4800C610E2 /* NSError+RFKitTests.m in Sources */,
D5C6F5A52032BB6A00D1E8DF /* NSFileManager+RFKitTests.m in Sources */,
Expand Down
2 changes: 1 addition & 1 deletion Test/Test/Shared/RTHelper.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

@implementation RTHelper

+ (BOOL)catchException:(void(^)(void))tryBlock error:(NSError *__autoreleasing*)error {
+ (BOOL)catchException:(NS_NOESCAPE void(^)(void))tryBlock error:(NSError *__autoreleasing*)error {
@try {
tryBlock();
return YES;
Expand Down
37 changes: 37 additions & 0 deletions Test/Test/Shared/RuntimeTests.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// RuntimeTests.m
// RFKit
//
// Created by BB9z on 2018/9/17.
// Copyright © 2018 RFUI. All rights reserved.
//

#import <XCTest/XCTest.h>
#import <RFKit/RFRuntime.h>

@interface RuntimeTests : XCTestCase
@property (nonatomic) RuntimeTests *selfRefrence;
@end

@implementation RuntimeTests
@dynamic selfRefrence;

- (void)testKeypathClassInstance {
NSString *__nonnull kp0 = @keypath(RuntimeTests.new, selfRefrence);
XCTAssertEqualObjects(kp0, @"selfRefrence");

NSString *__nonnull kp = @keypathClassInstance(RuntimeTests, selfRefrence);
XCTAssertEqualObjects(kp, @"selfRefrence");
NSString *__nonnull kp2 = @keypathClassInstance(RuntimeTests, selfRefrence, selfRefrence.selfRefrence);
XCTAssertEqualObjects(kp2, @"selfRefrence.selfRefrence");
}

- (void)testDefineConstString {
RFDefineConstString(aaa);
RFDefineConstString(bbb, "something");

XCTAssertEqualObjects(aaa, @"aaa");
XCTAssertEqualObjects(bbb, @"something");
}

@end
32 changes: 32 additions & 0 deletions Test/Test/macOS/RuntimeMacOSTests.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// RuntimeMacOSTests.m
// Test-macOS
//
// Created by BB9z on 2018/9/17.
// Copyright © 2018 RFUI. All rights reserved.
//

#import <XCTest/XCTest.h>
#import <RFKit/RFRuntime.h>

@interface RuntimeMacOSTests : XCTestCase

@end

@implementation RuntimeMacOSTests

- (void)testUITypesBridge {
UIEdgeInsets inset = UIEdgeInsetsMake(1, 2, 3, 4);
NSEdgeInsets inset2 = NSEdgeInsetsMake(1, 2, 3, 4);
XCTAssert(UIEdgeInsetsEqualToEdgeInsets(inset, inset2));

// Strange, use NSEdgeInsetsZero case build fails. Xcode 10
// NSEdgeInsets inset4 = NSEdgeInsetsZero;
// UIEdgeInsets inset3 = UIEdgeInsetsZero;
// XCTAssertFalse(UIEdgeInsetsEqualToEdgeInsets(inset3, inset2));
XCTAssert(UIView.class == NSView.class);
XCTAssert(UIButton.class == NSButton.class);
XCTAssert(UIImage.class == NSImage.class);
}

@end
4 changes: 2 additions & 2 deletions category/Foundation/NSArray+RFKit.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ - (nonnull NSArray *)rf_subarrayWithRangeLocation:(const NSInteger)location leng
}


- (nonnull NSMutableArray *)rf_mapedArrayWithBlock:(id _Nullable (^_Nonnull)(id _Nonnull))block {
- (nonnull NSMutableArray *)rf_mapedArrayWithBlock:(NS_NOESCAPE id _Nullable (^_Nonnull)(id _Nonnull))block {
NSMutableArray *map = [NSMutableArray arrayWithCapacity:self.count];
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
id value = block(obj);
Expand Down Expand Up @@ -82,7 +82,7 @@ - (void)setLastObject:(nullable id)anObject {
self[idx] = (id)anObject;
}

- (void)removeObjectsPassingTest:(BOOL (^__nonnull)(id __nonnull obj, NSUInteger idx, BOOL *__nonnull stop))predicate {
- (void)removeObjectsPassingTest:(NS_NOESCAPE BOOL (^__nonnull)(id __nonnull obj, NSUInteger idx, BOOL *__nonnull stop))predicate {
NSIndexSet *is = [self indexesOfObjectsPassingTest:predicate];
[self removeObjectsAtIndexes:is];
}
Expand Down
8 changes: 4 additions & 4 deletions category/Foundation/NSDictionary+RFKit.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
@implementation NSDictionary (RFKit)

- (BOOL)boolForKey:(id)aKey {
return [self[aKey] boolValue];
return [(NSNumber *)self[aKey] boolValue];
}
- (NSInteger)integerForKey:(id)aKey {
return [self[aKey] integerValue];
return [(NSNumber *)self[aKey] integerValue];
}
- (float)floatForKey:(id)aKey {
return [self[aKey] floatValue];
return [(NSNumber *)self[aKey] floatValue];
}
- (double)doubleForKey:(id)aKey {
return [self[aKey] doubleValue];
return [(NSNumber *)self[aKey] doubleValue];
}

@end
Expand Down
18 changes: 9 additions & 9 deletions category/Foundation/NSObject+RFKit.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,30 @@ - (nonnull NSArray *)objectsForIndexArray:(nullable NSArray *)indexsArray {

for (NSUInteger i = 0; i < indexCount; i++) {
id ctIndex = indexsArray[i];
if ([ctIndex isKindOfClass:NSNumber.class]) {
if (![ctObjectSet respondsToSelector:@selector(objectAtIndex:)]) {
if ([(id<NSObject>)ctIndex isKindOfClass:NSNumber.class]) {
if (![(id<NSObject>)ctObjectSet respondsToSelector:@selector(objectAtIndex:)]) {
@throw [NSException exceptionWithName:@"RFKit: Bad selector" reason:[NSString stringWithFormat:@"%@ can`t responds objectAtIndex: for index %@.", ctObjectSet, ctIndex] userInfo:@{@"set": self, @"indexsArray": (id)indexsArray}];
}
NSNumber *indexObj = ctIndex;
ctObjectSet = [ctObjectSet objectAtIndex:indexObj.integerValue];
ctObjectSet = [(NSArray *)ctObjectSet objectAtIndex:indexObj.integerValue];
}
else {
if (![ctObjectSet respondsToSelector:@selector(objectForKey:)]) {
if (![(id<NSObject>)ctObjectSet respondsToSelector:@selector(objectForKey:)]) {
@throw [NSException exceptionWithName:@"RFKit: Bad selector" reason:[NSString stringWithFormat:@"%@ can`t responds objectForKey: for index %@.", ctObjectSet, ctIndex] userInfo:@{@"set": self, @"indexsArray": (id)indexsArray}];
}
ctObjectSet = [ctObjectSet objectForKey:ctIndex];
ctObjectSet = [(NSDictionary *)ctObjectSet objectForKey:ctIndex];
}
}

if (![ctObjectSet isKindOfClass:NSArray.class]) {
if (![(id<NSObject>)ctObjectSet isKindOfClass:NSArray.class]) {
ctObjectSet = @[ctObjectSet];
}
return ctObjectSet;
}

- (nullable NSArray *)objectsForDictKeyArray:(nullable NSArray *)keyArray {
if (keyArray.count == 0
|| ![keyArray.firstObject isKindOfClass:NSString.class]) {
|| ![(id<NSObject>)keyArray.firstObject isKindOfClass:NSString.class]) {
return nil;
}
NSArray *keys = keyArray;
Expand Down Expand Up @@ -66,15 +66,15 @@ - (nullable NSArray *)objectsForDictKeyArray:(nullable NSArray *)keyArray {
// Array
NSMutableArray *r = [NSMutableArray arrayWithCapacity:20];

for (id obj in (NSArray *)self) {
for (NSObject *obj in (NSArray *)self) {
id tmp = [obj objectsForDictKeyArray:keys];
[r addObjectsFromArray:tmp];
}
return r;
}
else {
// Dict
id ctObjectSet = [(NSDictionary *)self objectForKey:firstIndex];
NSObject *ctObjectSet = [(NSDictionary *)self objectForKey:firstIndex];
return [ctObjectSet objectsForDictKeyArray:arrayFirstRemoved];
}
}
Expand Down
Loading

0 comments on commit f10323a

Please sign in to comment.