Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSMutableArray删除空值_Ios_Objective C_Nsmutablearray_Nsnull - Fatal编程技术网

Ios NSMutableArray删除空值

Ios NSMutableArray删除空值,ios,objective-c,nsmutablearray,nsnull,Ios,Objective C,Nsmutablearray,Nsnull,从我的JSON提要中,我创建了一个NSMutableArray来保存我的NDDictionary对象。当我在UITableView中显示它时,它会由于值而崩溃。所以我需要知道,如何从数组中删除这些“对象 下面是从JSON返回的内容的打印输出: Service Names: ( "Nether Edge to Woodhouse", "Barnsley to Rotherham", "Woodhouse to Nether Edge", "Rotherham to Barnsley", "Donc

从我的JSON提要中,我创建了一个
NSMutableArray
来保存我的
NDDictionary
对象。当我在
UITableView
中显示它时,它会由于
值而崩溃。所以我需要知道,如何从数组中删除这些
对象

下面是从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"
)
服务名称:(
“通往伍德豪斯的幽冥边缘”,
“巴恩斯利致罗瑟汉姆”,
“木屋到幽冥边缘”,
“Rotherham致Barnsley”,
“Doncaster到工作台”,
“工作台到唐卡斯特”,
“潘尼斯通至巴恩斯利立交桥”,
“从巴恩斯利立交到潘尼斯通”,
"",
“巴恩斯利致罗瑟汉姆”,
“Rotherham致Barnsley”,
"",
“巴特肖到圣贝德斯RC高中”,
“圣贝德斯RC高中至巴特肖”,
"",
“Sandholme大道到Ilkley GS”,
“Ilkley GS到Sandholme大道”,
"",
“巴恩斯利致罗瑟汉姆”,
“Rotherham致Barnsley”
)
我尝试过以下方法:

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

[serviceNames removeObjectsIdenticalTo:@”“;
[serviceNames removeObjectsIdenticalTo:[NSNull];
所有这些都失败了,所以任何人都可以告诉我一个简单的方法,从这个数组中删除
对象,因为它让我发疯

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

tempArray是真正的数组

NSMutableArray*mainArray=[[NSMutableArray alloc]init];
对于(int i=0;i<[tempArray count];i++){
id obj=[tempArray objectAtIndex:i];
if(![obj iskindof类:[NSNull类]]){//或if(![obj iskindof类:[[NSNull类]])){
[mainArray addObject:obj];
}
}
NSLog(@“%@”,主阵列);

您可以使用NSPredicate:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF CONTAINS %@)", @"<null>"];
    [serviceNames filterUsingPredicate:predicate];
NSPredicate*谓词=[NSPredicate predicateWithFormat:@“非(自身包含%@)”,@“];
[serviceNames FilterSingPredicate:谓词];

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

您可以通过这种方式从数组中删除所有空字符串

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

for(uint i=0;i这里有一种更短、可能更有效的方法:

编辑:这个问题的答案甚至比我自己的答案更好。

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

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


[NSNull-null]
生成一个单例对象,因此您可以随意比较地址的相等性。使用
isKindOfClass:
isEqual:
都是不必要的检查,速度会减慢。如果您要自己迭代对象,只需使用
=
操作符,而不是发送昂贵的消息。

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

在数组上循环,记录每个项及其类名。为表创建单元格时检查是否为Null。请尝试[arr removeObject:@“\”\”
serviceNames
实际上不是一个
NSMutableArray
;从您自己的日志中,我可以看到这种情况
-[\uu NSArrayI removeObjectIdenticalTo:::]:发送到实例0x8bb4370的无法识别的选择器
。这就是为什么
[serviceNames removeObjectsIdenticalTo:[NSNull]];
不起作用。已经有人建议使用谓词,所以我将把它留在这里,并对他们的答案进行投票。NSArray*nonNullResults=[serviceNames filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@“SELF!=null”]]使用此选项时获得以下堆栈:检查我的更新答案。并让我知道它是否适用于您?使用removeObjectIdenticalTo:[NSNull]]时,我得到以下结果:Thanks@DamienD这是因为您正在将该消息发送到一个不可变数组。您需要一个可变数组(我更新了我的答案以向您展示)。我在NSMutableArray上调用它:/tempServiceNames=[[NSMutableArray alloc]init];@damien给我看看你的代码,因为如果你真的将消息发送到一个可变数组,你就不会得到那个错误。你做错了什么。头文件在顶部,实现在下面,谢谢。
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (SELF CONTAINS %@)", @"<null>"];
    [serviceNames filterUsingPredicate:predicate];
for(uint i=0;i<serviceNames.count;i++)
{
    if([[serviceNames objectAtIndex:i] isKindOfClass:[NSNull class]])
        [serviceNames removeObjectAtIndex:i];
}