我正在将之前存储在XML中的现有数据模型转换为核心数据,因此我试图尽可能正确地学习这些绳索。核心数据显然是那些很快就不会去的技术之一,所以我不妨“学习它是正确的”。针对特定关系的核心数据NSFetchRequest?
就拿两个实体核心数据模型:
- 人
- 食品
人有2个一到许多与食物关系:
个- favoriteFoods(1对多)
- hatedFoods(1对多)
(两者Person和食品是NSManagedObject的亚类。)
在以前的数据模型,人维护了两个NSArray
实例变量。如果我想要最喜欢的食物,我可以打电话:
Person *fred = [[Person alloc] init];
NSArray *fredsFavorites = fred.favoriteFoods;
容易挤。
我正在阅读核心数据的文档,我似乎无法找到正确的方式来获得这个NSArray NSFetchRequest
,因为我无法定义我想从中获取对象的关系。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Food" inManagedObjectContext:[fred managedObjectContext]]];
[request setIncludesSubentities:NO];
NSArray *fredsFavoriteAndHatedFoods = [[fred managedObjectContext] executeFetchRequest:request error:nil];
这将返回所有存储在这两个favoriteFoods
和hatedFoods
的食品项目。我怎样才能分解这些?当然这里有一个简单的解释,但我目前并没有把这个概念很好地理解为用Core Data行话来解释它,因此我的Google搜索没有结果。
完美 - 在[fred.favoriteFoods allObjects]位正是我一直在寻找。后续问题虽然 - 有没有一种方法来排序该调用中的NSArray,例如。 [fred.favoriteFoods allObjectsUsingSortDescriptor:myDescriptor]?还是需要我在返回的NSArray上调用排序方法? (看起来好像需要更少的内存在第一次方法调用期间对其进行排序。) – 2011-03-17 02:08:46
是的,您可以使用'allObjectsUsingSortDescriptor:'。根据具体情况,在获取请求本身或者在加载对象(使用'allObjectsUsingSortDescriptor:'或类似的东西)之后在RAM中进行排序可能会更快。这实际上取决于您的确切数据模型以及您正在处理的数据量。当我说“在获取请求本身”时,我指的是“NSFetchRequest.sortDescriptors”属性。 – 2011-03-17 02:21:27
哦 - 甚至没有在NSFetchRequest上看到sortDescriptors属性。尼斯。 – 2011-03-17 02:32:41