Objective-c enumerateUsingBlock Issue - PullRequest
       13

Objective-c enumerateUsingBlock Issue

0 голосов
/ 21 октября 2011

Я хочу извлечь все объекты с префиксом «be», но я получаю только первый объект, а не все из различных индексов. «массив» содержит различные объекты и содержит такие объекты, как «быть», «стать», «бета», «быть», «бобр» и т. д. Что здесь не так?

Когда я использую localizedCaseInsensitiveCompare:, он показывает только два «be», что правильно с точки зрения «isEqualToString:», а «массив» содержит фактически два «be» из разных индексов.

Коды следующие:

NSString *string =@"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;

    }

} ];

1 Ответ

3 голосов
/ 21 октября 2011

Вы получаете только первое, потому что вы останавливаете цикл, как только вы найдете единственный результат через строку *stop = YES. Удалить это.

Вы также должны использовать -indexesOfObjectsPassingTest: в своем тесте, затем взять возвращенный набор индексов и передать его -objectsAtIndexes:.

...