2010-08-22 6 views

답변

10

. 자신의 NSArray 메소드를 작성하는 것이 좋습니다.

0

아니요. 그것이 당신이하는 방법입니다. 새로운 iOS4 API에서 블록을 허용하는 버전이있을 수 있지만 조금 더 간단 할 수도 있습니다.

FooType *myFoo = nil; 
NSUInteger index = [myArray indexOfObjectPassingTest:^BOOL (id obj, NSUInteger idx, BOOL *stop) { 
    return [obj isKindOfClass:[FooType class]]; 
}]; 
if (index != NSNotFound) myFoo = [myArray objectAtIndex:index]; 

정말 아니다 어떤 짧은 : (아이폰 OS 4 또는 스노우 레오파드에서) 블록 지원으로

3

언급 된 jtbandes와 마찬가지로,이 작업을 많이 수행하려는 경우 NSArray 메소드를 카테고리로 작성할 수 있습니다. 이런 식으로 뭔가 :

@interface NSArray (FindClass) 
- (NSMutableArray *) findObjectsOfClass:(Class)theClass 
@end 

다음

@implementation NSArray (FindClass) 
- (NSMutableArray *) findObjectsOfClass:(Class)theClass { 
    NSMutableArray *results = [[NSMutableArray alloc] init]; 

    for (id obj in self) { 
     if ([obj isKindOfClass:theClass]) 
      [results addObject:obj]; 
    } 

    return [results autorelease]; 
} 
@end 

그때 당신이 그것을 사용하고자하는 바로 수행

NSMutableArray *objects = [myArray findObjectsOfClass:[FooType class]]; 

지정된 클래스의 모든 개체를 보유해야한다.

면책 조항 : 테스트하지 마시고, 잘못되어 사과드립니다./

관련 문제