为核心数据中的transforable属性编写SortDescriptor?

时间:2010-07-27 19:24:49

标签: iphone ipad core-data nsfetchedresultscontroller

我有一个实体标题,它有一个属性NSDictionary,它在模型中被声明为可转换的。现在我想不对fetchedRequestController中的标头数组进行排序。传递nil或null对象会产生错误。请帮忙。

让我从最后一次重构:如果我有一个实体,带有可转换的属性标题。我在生成的类中将id类型更改为NSDictionary。我现在需要访问字典的键作为entity.attribute name.key ...我得到一个错误,因为这个类不是键的键值编码投诉:(键)...这个问题的解决方法是什么。

// Create and configure a fetch request with the Book entity. NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"headers" inManagedObjectContext:self.tableCellGenericMoc]; [fetchRequest setEntity:entity]; // Create the sort descriptors array. NSSortDescriptor *headersDescriptor = [[NSSortDescriptor alloc] initWithKey:@"headersDictionary" ascending:NO]; NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:headersDescriptor, nil]; [fetchRequest setSortDescriptors:sortDescriptors]; // Create and initialize the fetch results controller. NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.tableCellGenericMoc sectionNameKeyPath:@"headresDictionary" cacheName:@"Root"]; self.fetchedResultsController = aFetchedResultsController; fetchedResultsController.delegate = self;

上面的选择器给出了一个错误,因为它无法对headersDictionary ...

进行排序

1 个答案:

答案 0 :(得分:1)

为什么要在Core Data中存储NSDictionary?这就是简单地说,做错了。如果你想要像字典这样的东西,只需在一对多关系的另一端创建一个子对象,该关系具有名称和值。

如果您正确设计模型,那么您将不会遇到现在遇到的问题,并且可以使用谓词直接过滤NSFetchRequest中的排序描述符。

更新

  哦,谢谢你...问题是我从网上得到的字典没有固定的Keys结构..所以我必须得到字典,因为它是一个可转换的属性

仍然没有任何意义。我描述的设计与在可转换对象内部具有字典相同,除了它在核心数据级别上有用。您不需要在我描述的设计中使用固定键。

重新思考你的设计,这个问题变得无关紧要。