具有多个对象的NSArray

时间:2013-09-06 04:35:40

标签: ios nsarray

我有一个包含10个对象的数组,有时在10个对象中,有些对象趋于null,如果任何对象为null,则在UIPickerView中它为空,但我想要If任何对象的值为null然后它应该被跳过..我想要做的是

if([ob1 isEqualToString:@""]){
NSArray *Ar =[NSArray arrayWithObjects:ob2,ob3,ob4,ob5,ob6,ob7,ob8,ob9,ob10,Nil];}
else if [ob2 isEqualToString:@""] {}

但如果我以这种方式跳过任何空值,这将是长链。应该是更好的方法。

5 个答案:

答案 0 :(得分:1)

如果10个对象中的任何一个可以是nil(注意 - 使用nil进行Objective-C对象引用)那么你需要这么做:

NSMutableArray *array = [[NSMutableArray alloc] init];
if (ob1) [array addObject:ob1];
if (ob2) [array addObject:ob2];
if (ob3) [array addObject:ob3];
// ...
if (ob10) [array addObject:ob10];

检查每个对象是否为nil。如果您还想确保它不是nil且长度值不为零,请将每个if条件更改为:

if (ob1.length) ...

答案 1 :(得分:0)

您应该使用NSMutableArray,而不是NSArray。如下所示:

NSMutableArray *m_array = [NSMutableArray array];

//Now you can check your objects if nil or empty string @"" and add it to the array.

if(object1==nil || [object1 isEqualToString:@""])
{
   //the string is empty do not add anything to array
}
else
{
  //we have a proper object
  [m_array addObject:object1];
}

//here you'll get the array will only proper objects.
//use this array to fill your pickerView data.

答案 2 :(得分:0)

首先选择NSMutableArray。 还有一个NSArray,它使用包括null在内的所有对象进行初始化。 然后检查对象是否为null,然后添加到可变数组。

NSMutableArray *array = [[NSMutableArray alloc]init];
  for (int i=0;i<10;i++) {
    if (![[objectArray objectAtIndex:i] isEqualToString:@""]) {
      [array addObject:[objectArray objectAtIndex:i]];
    }
  }

其中ObjectArray是NSArray包含所有对象。我们可以看到它需要较少的编码。

答案 3 :(得分:0)

尝试使用此条件

if ((ob2 == [NSNull null]) && ob2 == nil) {

}

答案 4 :(得分:0)

我遇到了与nil对象相同的问题,并为NS(Mutable)Array写了一个类别。 所以而不是:

NSMutableArray *array = [[NSMutableArray alloc] init];
if (ob0) [array addObject:ob0];
if (ob1) [array addObject:ob1];
if (ob2) [array addObject:ob2];
if (ob3) [array addObject:ob3];

您可以使用arrayWithObjectsNil跳过nil对象:

id obs[] = { ob0, ob1, ob2, ob3 }; // Assuming obj1 and obj3 are nil. 
  NSLog(@"%@", [NSArray arrayWithObjectsNil:obs size:sizeof(obs)]);
> ( 0, 2 )

或使用arrayWithObjectsNull将nil对象转换为[NSNull null]

  NSLog(@"%@", [NSArray arrayWithObjectsNull:obs size:sizeof(obs)]);
> ( 0, "<null>", 2, "<null>" )

使用该类别,也可以使用可变性并以这种方式编写:

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObjectNil:ob0];   // skip, if ob0 is nil
[array addObjectNull:ob1];  // add [NSNull null], if ob1 is nil
...

还有其他方法具有相同的逻辑。

您可以在GitHub上找到名为Nilus的类别。