0

从我的 JSON 提要中,我创建了一个NSMutableArray来保存我的NDDictionary对象。当我在 a 中显示它时,UITableView它会因为<null>Values 而崩溃。所以我需要知道,我如何才能"<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>"从这个数组中删除对象的简单方法,因为它让我发疯!

4

5 回答 5

1

您可以使用 NSPredicate :

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

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

于 2013-11-27T18:49:57.473 回答
0

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

于 2013-11-27T19:21:54.437 回答
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);
于 2013-11-27T18:42:41.890 回答
0

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

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

然后重新加载你的表

于 2013-11-27T19:04:23.873 回答
0

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

编辑:这个重复问题的答案比我自己的还要好。

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

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

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

于 2013-11-27T19:16:54.377 回答