我需要根据存储在NSString
中的整数对一堆对象进行排序。
我知道这是一个解决方案并且有效:
NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"from" ascending: YES comparator:^(id obj1, id obj2)
{
if ([obj1 integerValue] > [obj2 integerValue])
{
return (NSComparisonResult) NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue])
{
return (NSComparisonResult) NSOrderedAscending;
}
return (NSComparisonResult) NSOrderedSame;
}];
self.myObjects = [[self.data allObjects] sortedArrayUsingDescriptors: @[mySortDescriptor]];
我的问题是,为什么我不能使用KVO,它看起来更干净,例如:
NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"from.integerValue" ascending: YES];
然后将其传递给我的NSFetchRequest
使用此代码,在21之前出现200。
答案 0 :(得分:2)
基于(基于SQLite)的核心数据获取请求的排序描述符只能使用持久属性和一组有限的内置选择器,但不能使用像Objective-C这样的方法
integerValue
。
在这种情况下,integerValue
似乎只是被忽略,因此from
值
分类为字符串,而不是数字。
如果你不能将属性类型更改为“整数”(这也可以解决问题) 然后您可以使用特殊选择器作为解决方法:
NSSortDescriptor *mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"from"
ascending:YES
selector:@selector(localizedStandardCompare:)];
localizedStandardCompare
是“类似Finder的排序”并对包含数字的字符串进行排序
根据他们的数值。