2010-08-22 15 views

cevap

10

. Bunu yapmak için kendi NSArray yönteminizi yazmayı düşünebilirsiniz.

0

Nope. Bunu böyle yaparsın. Yeni iOS4 API'sinde bir bloğu kabul eden bir sürüm olsa da, bunu biraz daha kolaylaştırabilir.

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]; 

Gerçekten olmayan herhangi kısa: (iOS 4 veya Snow Leopard) Blokları desteğiyle

3

Belirtilen jtbandes gibi, bunu çok yapacaksanız kategori olarak bir NSArray yöntemi yazabilirsiniz. Böyle bir şey:

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

sonra

@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 

ardından onu kullanmak istiyorum sadece yapın:

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

belirtilen sınıfın tüm nesneleri tutmak hangi.

Yasal Uyarı:/

: test edilmedi, üzgün bir şeylerin yanlış ise
İlgili konular