2011-10-20 3 views
0

接頭辞「be」を持つすべてのオブジェクトを抽出しますが、最初のオブジェクトのみを取得します。 「配列」にはさまざまなオブジェクトが含まれており、「be」、「become」、「beta」、「be」、「beaver」などのオブジェクトが含まれています。Objective-c enumerateUsingBlock問題

localizedCaseInsensitiveCompare:を使用すると、 "isEqualToString:"で正しい "be"が2つだけ表示され、 "array"は異なるインデックスから実際に2つの "be"を含みます。

コードは以下の通りです:あなたは*stop = YES回線を介して単一の結果を見つけるとあなたはとすぐにループを止めるため

NSString *string [email protected]"be"; 

NSRange range = NSMakeRange(0, 24); 

NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndexesInRange: range]; 

[array enumerateObjectsAtIndexes:indexSet options: NSEnumerationConcurrent usingBlock:^(id obj, NSUInteger index, BOOL *stop) 

{ 
    //if([obj localizedCaseInsensitiveCompare:string] == NSOrderedSame) 
    if([obj hasPrefix:string]) 

    { 
     NSLog(@"Object Found: %@ at index: %i",obj, index); 

     *stop=YES; 

    } 

} ]; 

答えて

3

は、あなただけの最初を取得します。それを取り除く。

また、-indexesOfObjectsPassingTest:をテストに使用し、返されたインデックスセットを使用して-objectsAtIndexes:に渡す必要があります。

+0

ああ、あなたは正しいです!私の愚かな質問には申し訳ありません。ところで、あなたは 'indexesOfObjectsPassingTest:'の例を挙げることができますか? – wagashi

関連する問題