0

我想提取所有前缀为“be”的对象,但我只得到第一个对象,而不是所有来自各种索引的对象。“array”包含各种对象,它包含“be”、“become”、“beta”、“be”、“beaver”等对象。这里有什么问题?

当我使用localizedCaseInsensitiveCompare:时,它只显示两个“be”,就“ isEqualToString:”而言是正确的,“array”实际上包含来自不同索引的两个“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;

    }

} ];
4

1 回答 1

3

您只能获得第一个,因为您在通过该*stop = YES行找到单个结果后立即停止循环。删除它。

您还应该使用-indexesOfObjectsPassingTest:您的测试,然后获取返回的索引集并将其传递给-objectsAtIndexes:.

于 2011-10-20T22:54:50.287 回答