2010-08-22 13 views
5

मेरी पहली वृत्तिएनएसएआरएआरई में किसी प्रकार का ऑब्जेक्ट कैसे ढूंढें?

FooType *myFoo = nil; 
for (id obj in myArray) { 
    if ([obj isKindOfClass:[FooType class]]) myFoo = obj; 
} 
ऑब्जेक्टिव-सी और NSArray में सभी उपहार के साथ

के लिए है, वहाँ होगा एक बेहतर तरीका है, है ना हो रहा है?

उत्तर

10
ब्लाकों समर्थन (आईओएस 4 या Snow Leopard में) के साथ

। ऐसा करने के लिए आप अपनी खुद की NSArray विधि लिखने पर विचार कर सकते हैं।

0

नहीं। इस तरह आप इसे करेंगे। यद्यपि ऐसा संस्करण हो सकता है जो नए आईओएस 4 एपीआई में एक ब्लॉक स्वीकार करता है जो इसे थोड़ा आसान बना सकता है।

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

यह वास्तव में किसी भी छोटे नहीं है:

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

जो निर्दिष्ट वर्ग की वस्तुओं के सभी धारण करना चाहिए।

अस्वीकरण: परीक्षण नहीं किया गया है, क्षमा करें अगर कुछ गलत है:/

संबंधित मुद्दे