我有三个模特:
+----------+ +--------------+ +------+
| Occasion | <--->> | GiftOccasion | <--->> | Gift |
+----------+ +--------------+ +------+
我想知道这个场合的名称,以及所有符合特定标准的礼物的数量。目前,我得到了按年份和名称排序的不同场合列表:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request retain];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Occasion" inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"name", @"year", nil]];
[request setReturnsDistinctResults:YES];
NSSortDescriptor *yearDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"year" ascending:NO selector: @selector(caseInsensitiveCompare:)] autorelease];
NSSortDescriptor *nameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector: @selector(caseInsensitiveCompare:)] autorelease];
NSArray *descriptors = [NSArray arrayWithObjects:yearDescriptor, nameDescriptor, nil];
[request setSortDescriptors:descriptors];
NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:request error:&error];
..。但是我完全搞不懂如何计算Gift
的数量。是否有一种简单的方法,或者我是否需要遍历每个GiftOccasion
和相关的Gift
,并将其全部添加到一起?
ETA:请注意,我是生成了不同的结果--,在这里,不是直接得到模型。我想我需要运行另一个请求来获取这个信息,但是如果可能的话,那就更好了。
谢谢!
发布于 2010-12-23 01:15:08
发布于 2010-12-23 21:37:01
这不是一个好答案,我也不会选择它作为“正确”答案,但我最后做的是一组荒谬的嵌套NSEnumerator
,它们贯穿每个关系,并最终执行一个count += 1;
,类似于这样:
NSUInteger giftCount = 0;
NSEnumerator *oEnum = [resultsList objectEnumerator];
Occasion *occasion = nil;
while (occasion = [oEnum nextObject]) {
NSEnumerator *goEnum = [occasion.giftOccasions objectEnumerator];
GiftOccasion *go;
while (go = [goEnum nextObject]) {
if (go.gifts) {
NSEnumerator *giftEnum = [go.gifts objectEnumerator];
Gift *gift = nil;
while (gift = [giftEnum nextObject]) {
NSLog(@"Gift: %@ %@", gift.name, gift.purchased);
if ([gift.purchased boolValue] == NO) {
giftCount += 1;
}
}
}
}
}
很尴尬,但很管用。:-)
如果有更好、更有效的方法来做这件事,我很想听听。这是我不喜欢核心数据作为一个ORM的事情之一,比如说,ActiveRecord。
https://stackoverflow.com/questions/4514301
复制相似问题