NSSortDescriptor无法正常工作

时间:2012-10-11 13:20:58

标签: ios core-data nsfetchrequest nssortdescriptor

我有一个名为“TruckNumber”的核心数据实体,它有一个字符串作为唯一的属性。字符串通常是1-3位整数(作为字符串)但有时可以包含字母,如TMP9。该属性的名称是“itsNotANumma”。我正在执行一个获取请求来填充选择器,但它们没有被排序,我不知道为什么。我已经在其他实体上使用这种确切的技术用于其他选择器并且从未出现过问题。请帮忙......以下是相关代码:

// Fetch truck numbers
NSFetchRequest *truckNumberFetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *truckEntity = [NSEntityDescription entityForName:@"TruckNumber" inManagedObjectContext:self.managedObjectContext];
[truckNumberFetchRequest setEntity:truckEntity];

// Sort Descriptor
NSSortDescriptor *truckDescriptor = [[NSSortDescriptor alloc] initWithKey:@"itsNotANumma" ascending:YES];

NSArray *truckSortDescriptors = [[NSArray alloc] initWithObjects:truckDescriptor, nil];
[inventoryFetchRequest setSortDescriptors:truckSortDescriptors];
error = nil;
NSArray *truckResults = [managedObjectContext executeFetchRequest:truckNumberFetchRequest error:&error];

if (error)
    NSLog(@"Unresolved error while saving context: %@, %@", error, [error userInfo]);

truckNumbersArray = [[NSMutableArray alloc] init];
for (TruckNumber *truckNumber in truckResults)
{
    [truckNumbersArray addObject:truckNumber.itsNotANumma];
}

这是卡车号码的数据模型: enter image description here

结果如下:

enter image description here

2 个答案:

答案 0 :(得分:2)

看起来你有一个简单的拼写错误:

[inventoryFetchRequest setSortDescriptors:truckSortDescriptors];

应该是:

[truckNumberFetchRequest setSortDescriptors:truckSortDescriptors];

无论如何,我会假设从阅读该代码。

答案 1 :(得分:0)

[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES comparator:^(id obj1, id obj2){
    return [(NSString*)obj1 compare:(NSString*)obj2 options:NSNumericSearch]; 
}];

如果您的数字范围为1-5000或以上,则效果非常好。