在我的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>"
对象的简单方法,因为它让我疯了!
答案 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等)的最常见消息。它返回了最适合该消息的内容。工作就像一个魅力。