Использование KVC для поиска максимального значения в NSSet - PullRequest
0 голосов
/ 28 октября 2010

Я пытаюсь найти максимальное значение в свойстве order в этом объекте coredata:

#import <Foundation/Foundation.h>
#import "Story.h"

@class Story;

@interface Sentence : NSManagedObject {

}
@property (nonatomic, retain)   NSString        *text;
@property (nonatomic, retain)   NSString        *image;
@property (nonatomic, retain)   NSString        *thumb;
@property (nonatomic, retain)   NSNumber        *order;
@property (nonatomic, retain)   Story           *belongsTo;
@end

Используя KVC.Я использовал Apple Documentation в качестве ресурса (который, кажется, содержит ошибки в коде примера - отсутствует: и содержит @ в неправильном месте, но, возможно, я что-то упускаю?)

и последний код, который я пытался использовать, выглядит следующим образом:

NSSet *sentences = [story sentences]; //this is a valid NSSet filled with 1 or n Sentence objects
NSNumber *maxOrder = [sentences valueForKeyPath:@"max.order"];
NSLog(@"maxOrder:", maxOrder);

Я получаю следующую ошибку:

[33209: 207] * Завершение приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[<_PFCachedNumber 0xc4a9004> valueForUndefinedKey:]: этот класс не соответствует значению ключа, соответствующему кодированию для ключа макс.»

Извините, если ответ очевиден, и я упускаю суть, но я был бы признателен за понимание того, что я делаю неправильно;Документация Apple по этой теме кажется немного расплывчатой.Спасибо!

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Вы неправильно прочитали документацию. Ваш ключевой путь должен быть @"@max.order". Обратите внимание на @ внутри строки. @max является оператором сбора.

Вы правы в том, что в документации есть опечатки. Везде, где вы видите valueForKeyPath"@count" или что-то подобное, вы должны мысленно добавить :@ перед строкой, что превращает его в valueForKeyPath:@"@count".

1 голос
/ 28 октября 2010

Интересно, я никогда не понимал, что примеры в этом документе были неправильными. Точка с запятой и @ отсутствуют.

Синтаксис вы хотите это:

NSNumber *maxOrder = [sentences valueForKeyPath:@"@max.order"];
...