【问题标题】:How will I be able to remove [NSNull Null] objects from NSMutableArray?如何从 NSMutableArray 中删除 [NSNull Null] 对象?
【发布时间】:2012-02-08 11:19:37
【问题描述】:

我需要删除由添加的 Null 对象

 [mutArrSkills addObject:[NSNull null]];

我需要迭代吗?是否有任何函数可以从 NSMutableArray 中删除所有空值?

如果需要迭代,我该怎么做?

【问题讨论】:

  • removeObjectIdenticalTo 也会对数组进行迭代,所以你为什么不对自己进行迭代。

标签: iphone objective-c ios4 nsmutablearray


【解决方案1】:

可以使用NSMutableArrayremoveObjectIdenticalTo:方法,如下

[mutArrSkills removeObjectIdenticalTo:[NSNull null]];

删除空值。无需迭代。

【讨论】:

  • 你确定吗?我不是因为Objects are considered identical if their object addresses are the same.。你应该知道,[NSNull null] != [NSNull null]...
  • 是的,就本例而言,由 `[mutArrSkills addObject:[NSNull null]];` 添加的元素会随着该调用而被删除。
  • 你应该知道,[NSNull null] 确实等于 [NSNull null]。 NSNull 类只有一个实例。该类的所有对象都是同一个指针。
【解决方案2】:

removeObjectIdenticalTo:

删除数组中给定对象的所有匹配项。

讨论 此方法使用 indexOfObjectIdenticalTo: 方法定位匹配项,然后使用 removeObjectAtIndex: 将其删除。因此,匹配是使用对象地址确定的。如果数组不包含对象,则该方法无效(尽管它确实会产生搜索内容的开销)。

【讨论】:

  • 你确定吗?我不是因为Objects are considered identical if their object addresses are the same.。你应该知道,[NSNull null] != [NSNull null]...
  • @Nekto 请参考我的答案。
【解决方案3】:

你可以试试这个,

NSNull *nullValue = [NSNull null]; 

[mutArrSkills removeObjectIdenticalTo:nullValue];

我希望这会有所帮助。

【讨论】:

    【解决方案4】:

    在 Swift 中,您首先必须将 Swift Array 转换为 NSArray,使其可变,以便您可以删除 Objective-C 剩余元素,然后将其转换回 Array

    Fatal error: NSArray element failed to match the Swift Array Element type
    
    // my crashing array, containing a not String element, like NSNull or anything else
    let myUnsafeSwiftArray: [String]
    
    // make it safely NSArray, then make it mutable
    let mutableUnsafeArray = NSMutableArray(array: myUnsafeSwiftArray as NSArray)
    
    // remove leftover class, like [NSNull null] aka NSNull.init()
    unsafeTextures.removeObject(identicalTo: NSNull.init())
    
    // Cast the safe array back to its supposed to by element type
    let safeArray = unsafeTextures as? [String]
    

    【讨论】:

      【解决方案5】:

      你可以这样迭代。

      for(int i=0,i<[mutArrSkills count]; i++)
      {
        if([[mutArrSkills objectAtIndex:i] isKindOfClass:[NSNull Class]])
          {
          [mutArrSkills removeObjectAtIndex:i];  
         }
      }
      

      【讨论】:

      • 如果数组中有两个连续的 NSNull 对象,这根本不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多