具有比较器的NSSortDescriptor在获取与初始加载时更改行为

时间:2011-11-01 03:16:25

标签: iphone cocoa ios4 core-data nssortdescriptor

我对NSSortDescriptor的行为非常奇怪。让我们从我的代码开始:

NSSortDescriptor *nameExists = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES comparator:^(id obj1, id obj2){
  if ( ([obj1 isEqualToString:@""] || [obj1 isKindOfClass:[NSNull class]] || obj1 == nil) && ![obj2 isEqualToString:@""]){
    return NSOrderedDescending;
  }
  else if ( ![obj1 isEqualToString:@""] && ([obj2 isEqualToString:@""] || [obj2 isKindOfClass:[NSNull class]] || obj2 == nil) ){
    return NSOrderedAscending;
  }
  return NSOrderedSame;
}];

这是我用于在数据库中为具有名称字段和不具有名称字段的用户订购用户的排序描述符。因此,如果您有一个20人的用户列表,并且有5个人没有名字,但有15个人没有名字,那么15个名字将在没有名字的人之前排序。这与将字符串字段排序为升序的常规行为形成鲜明对比,后者将在非空白字段之前显示带有空白字段的条目。

当我第一次加载视图时,此排序描述符将恢复为默认行为 - 在完整字段之前显示空白字段,就像我的比较器不在那里一样。

但是,如果我将新条目拉入Core Data,我的NSFetchedResultsController会根据我的比较器正确加载条目。

我的直觉告诉我,我的街区放置有问题。我在视图的init方法中有它。但是,我将其更改为loadView方法并且行为仍然存在。

有谁知道发生了什么事?

0 个答案:

没有答案