我该如何从NSMutableArray中移除[NSNull Null]对象?

13

我需要删除被添加的空对象

 [mutArrSkills addObject:[NSNull null]];

我需要迭代吗?有没有函数可以从NSMutableArray中删除所有空值?

如果需要迭代,我该如何做?


1
removeObjectIdenticalTo 也会迭代数组,那为什么不自己迭代呢? - Inder Kumar Rathore
5个回答

31
你可以使用NSMutableArrayremoveObjectIdenticalTo:方法,如下所示。
[mutArrSkills removeObjectIdenticalTo:[NSNull null]];

去除空值。无需迭代。


你确定吗?我不确定,因为“如果对象地址相同,则认为对象是相同的。”正如你所知道的,[NSNull null] != [NSNull null]... - Nekto
是的,在这种情况下,通过 [mutArrSkills addObject:[NSNull null]]; 添加的元素将被该调用删除。 - Ilanchezhian
5
正如你所知,[NSNull null] 确实等于 [NSNull null]。类 NSNull 只有一个实例,所有该类的对象都是相同的指针。 - gnasher729

1
你可以尝试这样做:
NSNull *nullValue = [NSNull null]; 

[mutArrSkills removeObjectIdenticalTo:nullValue];

希望这能有所帮助。


1

removeObjectIdenticalTo:

在数组中移除所有出现的指定对象。

讨论 该方法使用indexOfObjectIdenticalTo:方法来定位匹配项,然后使用removeObjectAtIndex:来移除它们。因此,匹配是使用对象地址确定的。如果数组不包含anObject,则该方法无效(尽管它会产生搜索内容的开销)。


你确定吗?我不确定,因为“如果对象地址相同,则认为对象是相同的。”正如你所知道的,[NSNull null] != [NSNull null]... - Nekto
@Nekto请参考我的下面的回答。 - sElanthiraiyan

0
在Swift中,您首先必须将您的SwiftArray转换为NSArray,并使其可变,以便您可以删除Objective-C遗留元素,然后再将其转换回Array
Fatal error: NSArray element failed to match the Swift Array Element type

// my crashing array, containing a not String element, like NSNull or anything else
let myUnsafeSwiftArray: [String]

// make it safely NSArray, then make it mutable
let mutableUnsafeArray = NSMutableArray(array: myUnsafeSwiftArray as NSArray)

// remove leftover class, like [NSNull null] aka NSNull.init()
unsafeTextures.removeObject(identicalTo: NSNull.init())

// Cast the safe array back to its supposed to by element type
let safeArray = unsafeTextures as? [String]

-1
你可以像这样迭代。
for(int i=0,i<[mutArrSkills count]; i++)
{
  if([[mutArrSkills objectAtIndex:i] isKindOfClass:[NSNull Class]])
    {
    [mutArrSkills removeObjectAtIndex:i];  
   }
}

2
如果数组中有连续的两个NSNull对象,那么这根本不起作用。 - gnasher729

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接