NSArray删除最后一个类型的对象?

Kyl*_*yle 3 cocoa-touch objective-c nsarray ios subviews

使用一组UIViews和UIImageViews([[[UIApplication sharedApplication] window]子视图]).我只需要删除UIImageView类型的最高索引的对象.

das*_*ght 6

您可以使用indexOfObjectWithOptions:passingTest:方法反向搜索使用块传递测试的对象的数组,然后在结果位置删除该对象:

NSUInteger pos = [myArray indexOfObjectWithOptions:NSEnumerationReverse
                          passingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [obj isKindOfClass:[UIImageView class]]; // <<== EDIT (Thanks, Nick Lockwood!)
}];
if (pos != NSNotFound) {
    [myArray removeObjectAtIndex:pos];
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案,但您应该使用isKindOfClass而不是==来比较类型,否则如果UIImageView实际上是UIImageView的子类,它将无法工作. (2认同)

Vik*_*ica 5

另一种基于块的解决方案

[window.subviews enumerateObjectsWithOptions:NSEnumerationReverse 
                                  usingBlock:^(id view, NSUInteger idx, BOOL *stop) 
    {
        if ([view isKindOfClass:[UIImageView class]]){
            [view removeFromSuperview];
            *stop=YES;
    }
}];
Run Code Online (Sandbox Code Playgroud)

非块解决方案:

for (UIView *view in [window.subview reverseObjectEnumerator])
{
    if ([view isKindOfClass:[UIImageView class]]){
            [view removeFromSuperview];
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑
我在github上发布了一个演示代码,它显示了两个解决方案.