NSSortDescriptor不适用于CoreData的所有属性

时间:2013-11-05 17:26:43

标签: uitableview core-data nssortdescriptor

我的桌子有一个问题。我已经创建了CoreData attribute1,2,3,用户可以在其中存储NSStrings。我在TableView中使用sortDescriptorWithKey显示此数据:“attribute1”。然后我的桌子上有三个按钮,用户可以通过点击它们来手动更改此说明。当他想通过attribute1或attribute2排列数据时,一切正常,但是attribute3不起作用。表中的数据按混乱排序。

任何帮助表示感谢。

这是我的代码:

-(IBAction)sortTable:(UIButton*)sender {
 NSString *key = @"price";
 if (sender.tag ==1) {
    key = @"date";
 } else if (sender.tag ==2) {
    key = @"result";
 } 
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Data"];
request.sortDescriptors =
@[[NSSortDescriptor sortDescriptorWithKey:key ascending:NO]];
self.mutableArray = [NSMutableArray arrayWithArray:[self.managedObjectContext executeFetchRequest:request error:nil]];
[self.tableView reloadData];
}

1 个答案:

答案 0 :(得分:1)

您的代码看起来很好。确保您实际上在表中显示attribute3字符串而不是其他内容。在实际的sqlite商店中与您的数据进行交叉检查。

不过,我认为您的代码非常多余。尽量简化。一种方法是让按钮具有标签1,2和3。

-(IBAction)sortTable:(UIButton*)sender {
    NSString *key = [NSString stringWithFormat:@"attribute%d", sender.tag];
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:"Data"];
    request.sortDescriptors = 
       @[[NSSortDescriptor sortDescriptorWithKey:key ascending:NO]];
    self.mutableArray = [NSMutableArray arrayWithArray:
       [self.managedObjectContext executeFetchRequest:request error:nil];
    [self.tableView reloadData];
}