NSMutableArray删除Null

时间:2013-11-27 18:32:46

标签: ios objective-c nsmutablearray nsnull

在我的JSON Feed中,我创建了一个NSMutableArray来保存我的NDDictionary个对象。当我在UITableView中显示此内容时,由于<null>值而导致崩溃。所以我需要知道,我怎么能从我的数组中删除这些"<null>"对象。

以下是从JSON返回的内容的打印输出:

Service Names: (
"Nether Edge to Woodhouse",
"Barnsley to Rotherham",
"Woodhouse to Nether Edge",
"Rotherham to Barnsley",
"Doncaster to Worksop",
"Worksop to Doncaster",
"Penistone to Barnsley Interchange",
"Barnsley Interchange to Penistone",
"<null>",
"Barnsley to Rotherham",
"Rotherham to Barnsley",
"<null>",
"Buttershaw to St Bedes RC Upper School",
"St Bedes RC Upper School to Buttershaw",
"<null>",
"Sandholme Drive to Ilkley GS",
"Ilkley GS to Sandholme Drive",
"<null>",
"Barnsley to Rotherham",
"Rotherham to Barnsley"
)

我尝试了以下内容:

[serviceNames removeObject:@"<null>"];
[serviceNames removeObject:[NSNull null]];

[serviceNames removeObjectsIdenticalTo:@"<null>"];
[serviceNames removeObjectsIdenticalTo:[NSNull Null]];

到目前为止所有失败的人都可以告诉我一个从这个数组中移除"<null>"对象的简单方法,因为它让我疯了!

5 个答案:

答案 0 :(得分:1)

您可以使用NSPredicate:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF CONTAINS %@)", @"<null>"];
    [serviceNames filterUsingPredicate:predicate];

使用serviceNames上的for-in循环,您应该注意到所有空字符串都已消失。

答案 1 :(得分:0)

试试这个,
注意:我没有测试过。

  

tempArray是你真正的数组。

NSMutableArray *mainArray = [[NSMutableArray alloc]init];
for (int i = 0; i < [tempArray count]; i++) {
    id obj = [tempArray objectAtIndex:i];
    if (![obj  isKindOfClass:[NSNull class]]) { // or if (![obj  isKindOfClass:[[NSNull null]class]]) {
        [mainArray addObject:obj];
    }
}

NSLog(@"%@",mainArray);

答案 2 :(得分:0)

您可以通过这种方式从数组中删除所有Null

for(uint i=0;i<serviceNames.count;i++)
{
    if([[serviceNames objectAtIndex:i] isKindOfClass:[NSNull class]])
        [serviceNames removeObjectAtIndex:i];
}

然后重新加载你的表

答案 3 :(得分:0)

这是一种更短且可能更有效的方法:

编辑:这个duplicate question的答案甚至比我自己的还要好。

只需使用[mutArrSkills removeObjectIdenticalTo:[NSNull null]];

即可

如果你的数组不是NSMutableArray,那么得到一个像NSMutableArray* mutableArray = [array mutableCopy];这样的可变副本这就是为什么当你尝试这个解决方案时它不起作用;因为你试图改变一个不可变的数组。

[NSNull null]生成一个单例对象,因此您可以根据需要比较地址的相等性。这是一项不必要的检查,并且放慢使用isKindOfClass:isEqual:。如果您要自己迭代对象,只需使用==运算符,而不是发送代价高昂的消息。

答案 4 :(得分:0)

我的解决方案是在NSNull上创建一个类别,该类别响应发送到其他JSON对象(integerValue等)的最常见消息。它返回了最适合该消息的内容。工作就像一个魅力。