3

我在 Core Data 中设置了几个对象,其中一个是“Deck”,其中一个是“Card”。“卡片”有几个编号关系,包括“id”。“Deck”与卡片是一对多的关系。

在牌组中找到对某些编号属性(例如 id)具有最小值的卡的最佳方法是什么?

显然我可以得到这样的卡片列表:

NSSet *cardList = self.cards;

我想我可以构建一个表达式来获得这样的最小值:

NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"id"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:" 
            arguments:[NSArray arrayWithObject:keyPathExpression]];

但我不太清楚如何使用该表达式来提取具有最小值 id 的卡片(或只是 id 的最小值)。

4

1 回答 1

7

您可以使用键值编码来做到这一点:

//assuming Card has an Id property which is a number
NSNumber *minId = [deck valueForKeyPath:@"cards.@min.Id"];

NSSet *minCards = [[deck cards] filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"Id==%@", minId]];

将给出其属性等于 中最小值NSSet的卡片。Iddeck.cards

有关更多信息,请参阅 Key-Value Programming Guide 对Set 和 Array Operators的描述。

于 2009-10-26T21:40:09.370 回答