带有比较器更改的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人将被排序在没有名字的人之前。 这与将字符串字段排序为Ascending的常见行为相反,后者会在非空白字段之前显示具有空白字段的条目。
当我第一次加载视图时,这个排序描述符恢复到默认行为 - 在全部字段之前有空白字段,就好像我的比较器不在那里一样。
但是,如果我将新条目拖入核心数据中,我的NSFetchedResultsController会根据我的比较器正确加载条目。
我的直觉告诉我,我的街区的位置有问题。 我在视图的init方法中使用它。 但是,我将其更改为loadView方法,并且行为持续存在。
有谁知道发生了什么事?
链接地址: http://www.djcxy.com/p/36175.html上一篇: NSSortDescriptor with Comparator Changes Behavior on Fetch vs Initial Load
下一篇: NSFetchedResultsController custom sort not getting called