如何从NSMutableArray中删除NULL值?iOS

7
我有一个出生日期的数组,该数组从Facebook获取填充,因此有一些朋友的出生日期是私有的,因此它包含NULL。如何将该数组转换为在空值处添加空字符串?该数组如下所示:
"<null>",
"10/29/1988",
"11/13",
"03/24/1987",
"04/25/1990",
"03/13",
"01/01",
"<null>",
"12/15/1905",
"07/10",
"11/02/1990",
"12/30/1990",
"<null>",
"07/22/1990",
"01/01",
"07/17/1989",
"08/28/1990",
"01/10/1990",
"06/12/1990",

我觉得我很蠢,这些都是字符串,<null> 也是字符串。 - Prakash Desai
6个回答

14

null值似乎是字符串字面量@"<null>",而不是在Cocoa集合中通常用于表示nilNSNull对象。您可以使用NSArrayfilteredArrayUsingPredicate方法过滤它们:

NSArray *filtered = [original filteredArrayUsingPredicate:pred];

有几种方法可以制作pred,其中之一是

NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id str, NSDictionary *unused) {
    return ![str isEqualToString:@"<null>"];
}];

正如@dasblinkenlight所提到的,此pred仅检查字符串是否等于字符串值"<null>"。如果您认为[NSNull null]值存在于数组中,则应该返回str!=[NSNull null]。另外:这与返回str!= nil不同。 - kevinl

12
您需要使用此方法来删除实际的 [NSNull null] 值。

您需要使用此方法来删除实际的 [NSNull null] 值。

 [array removeObjectIdenticalTo:[NSNull null]];

3
这对我有效:
注:此处为代码片段,无需翻译。
NSMutableArray *array = [NSMutableArray arrayWithObjects:
                         @"<null>",
                         @"10/29/1988",
                         @"11/13",
                         @"03/24/1987",
                         @"04/25/1990",
                         @"03/13",
                         @"01/01",
                         @"<null>",
                         @"12/15/1905",
                         @"07/10",
                         @"11/02/1990",
                         @"12/30/1990",
                         @"<null>",
                         @"07/22/1990",
                         @"01/01",
                         @"07/17/1989",
                         @"08/28/1990",
                         @"01/10/1990",
                         @"06/12/1990", nil];
NSLog(@"%d", [array count]);
NSString *nullStr = @"<null>";
[array removeObject:nullStr];
NSLog(@"%d", [array count]);

这只过滤了单词"<null>"的出现,而不是实际的NSNull值。 - davis

1
为了删除空值,请使用:

[yourMutableArray removeObjectIdenticalTo:[NSNull null]];

您不需要迭代。


至少要给原始答案以荣誉:https://dev59.com/4Gox5IYBdhLWcg3weUCe#9192377 - Akshit Zaveri

1
    for(int i = 0;[yourMutableArray count] > 0;i++){
            if([yourMutableArray isKindOfClass:[NSNull class]]){ // indentifies and removes null values from mutable array

            [yourMutableArray removeObjectAtIndex:i];
                            // or 
            [yourMutableArray replaceObjectAtIndex:i withObject:@"No date available"];

            NSLog(@"*** %@",yourMutableArray);
            }
       }

虽然这段代码可能回答了问题,但最好包含一些上下文,解释它的工作原理以及何时使用它。仅有代码的答案从长远来看并不有用。 - Troy Witthoeft

0

对于 JSON 响应,我会像这样删除空值

NSArray *arr = [NSArray arrayWithObjects:_IDArray, _TypeArray, _NameArray, _FlagArray, nil];
for (int i=0; i<_integer; i++) {
// My json response assigned to above 4 arrayes

    //Now remove null values 
    //Remove null values
    for (int j=0; j<arr.count; j++) {
         for (NSMutableArray *ar in arr) {
              if ([[ar objectAtIndex:i] isKindOfClass:[NSNull class]] || [[ar objectAtIndex:i] isEqualToString:@"null"]) {
                  [ar addObject:@""];//Add empty value before remove null value
                  [ar removeObjectAtIndex:i];
              }
         }
    }

}

现在移除空值

//将数组添加到可变数组中以移除空对象

NSArray *marr = [NSArray arrayWithObjects:_IDArray, _TypeArray, _NameArray, _FlagArray, nil];
//Remove empty objects from all arrays
for (int j=0; j<marr.count; j++) {
     for (int i=0; i<[[marr objectAtIndex:j] count]; i++) {
          if ([[[marr objectAtIndex:j] objectAtIndex:i] isEqualToString:@""]) {
              [[marr objectAtIndex:j] removeObjectAtIndex:i];
          }
      }
}

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