iOS :如何替换 NSArray 中出现的 <null>

iOS : how to replace occurrences of <null> in NSArray

我有一个 NSArray,其中包含 string 个值,但有时它也可能包含 null 个值。我得到这样的 array

(
    "<null>",
    "<null>",
    "<null>",
    "<null>",
    "<null>"
)

我想将上面的内容替换为,

(
    " ",
    " ",
    " ",
    " ",
    " "
)

这意味着我想用空 string 替换 <null>。如何做到这一点?我知道一些 string 方法,但无法在 array.

上实施

您将不得不使用 here 的答案并遍历数组中的每个字符串并将 "<null>" 替换为 " "

编辑:我想我误解了你的问题,如果数组包含 NSNull 对象,那么你仍然需要遍历数组并像

这样检查
for(int i = 0; i < array.count; i++){
 if([array[i] isKindOfClass:[NSNull class]]){
  array[i] = @" ";
 }
}

免责声明:还没有测试代码,只是在我的脑海中完成

如果您正在使用 swift,这是一种方式。

var stringArray = [String?]()

// Fill array with you stuff
// ...

// Check null (nil)
for string in stringArray
{
    if string == nil
    {
        string = " "
    }
}
NSMutableArray *arr = [myNullArray mutableCopy];

for (int i=0; i < [arr count]; i++)
{
  if ([[arr objectAtIndex:i] isKindOfClass:[NSNull Class]])
  {
     [arr inserObject:@" " atIndex:i];
  }
}

NSLog(arr);

首先我们需要了解,它是空字符串还是从NSNull对象的日志中获取的描述。我想 array 是你的数组。第一种情况:

 NSMutableArray * mutArr = @[].mutableCopy;
    for (id obj in array) {
        if ([obj isKindOfClass:NSString.class]) {
            if ([obj isEqualToString:@"<null>"]) {
                [mutArr addObject:@""];
            }
            else {
                [mutArr addObject:obj];
            }
        else {
            [mutArr addObject:obj];

        }
    }
    array = mutArr.copy;

但我猜是第二个:

NSMutableArray * mutArr = @[].mutableCopy;
    for (id obj in array) {
        if (obj == [NSNull null]) {
                [mutArr addObject:@""];
            }           
        else {
            [mutArr addObject:obj];

        }
    }
    array = mutArr.copy;

一些您可能感兴趣的提示:

  • 如果原始数组是一个 NSArray 是不可变的,你不能改变它的内容
  • 在迭代期间不要 remove/add 对象来自您用于迭代的同一数组,否则会引发异常
  • 大多数时候是对NSNull对象的描述。 NSNull 是偷偷摸摸的,因为它只能处理很少的方法,而且由于 recognizeSelector
  • 它总是导致崩溃的根源
  • 快速枚举比普通 C for 循环更快
  • 交换和替换数组中的对象需要时间

你可以试试这个。

for (NSInteger i = 0; i < array.count; i++) {
    if ([array[i] isEqual:[NSNull null]] || [array[i] isEqual:@"<null>"]) {
        [array replaceObjectAtIndex:i withObject:@" "];
    }
}
   NSMutableArray *anArray = [NSMutableArray arrayWithArray:yourArray];  
     for (id anObject in anArray) {

     if((anObject) && (anObject != nil) && !([anObject
     isKindOfClass:[NSNull class]]))   
     { 
          // if object is not nil  
     }
 else{
           anObject = @"";  
      } 
 }

    yourArray = (NSArray *)anArray;