Obj-C - 如何保护此排序数组不为空值

时间:2015-03-02 14:56:22

标签: ios objective-c arrays

我有一些我要排序的Json输入数组。某些排序描述符可能具有空值。如何防止空值异常?感谢。

目前我所拥有的是:

//sort the group arrays
    NSSortDescriptor *sortDescriptor1a;
    NSSortDescriptor *sortDescriptor1b;
    sortDescriptor1a = [[NSSortDescriptor alloc] initWithKey:@"Min" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    sortDescriptor1b = [[NSSortDescriptor alloc] initWithKey:@"Line" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    NSArray *sortDescriptors1 = [NSArray arrayWithObjects:sortDescriptor1a, sortDescriptor1b, nil];
    NSArray *tempArray1 = [unsortedGroup1 sortedArrayUsingDescriptors:sortDescriptors1 ];
    currentGroup1 = [tempArray1 mutableCopy];

    NSSortDescriptor *sortDescriptor2a;
.....

1 个答案:

答案 0 :(得分:1)

nil值的情况下,您希望排序行为是什么?以下内容将nil值推送到数组的末尾。

NSArray *sortedGroup1 = [unsortedGroup1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  NSComparisonResult result = NSOrderedSame;
  if (obj1.Min && obj2.Min) {
    result = [obj1.Min caseInsensitiveCompare:obj2.Min];
  } else if (obj1.Min) {
    result = NSOrderedDescending;
  } else if (obj2.Min) {
    result = NSOrderedAscending;
  }

  if (result == NSOrderedSame) {
    if (obj1.Line && obj2.Line) {
      result = [obj1.Line caseInsensitiveCompare:obj2.Line];
    } else if (obj1.Line) {
      result = NSOrderedDescending;
    } else if (obj2.Line) {
      result = NSOrderedAscending;
    }
  } 
  return result;
}];