开发者

Using KVC to find the maximum value in an NSSet

I'm trying to find the maximum value in the order property in this coredata object:

#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

Using KVC. I've been using the Apple Documentation as a resource (which seems to have errors in the example code - missing : and having the @ in the wrong place, but perhaps I'm missing something?)

and the latest code I've tried to use looks like this:

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);

I get the following error:

[33209:207] * Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<_PFCachedNumber 0xc4a9004> valueForUndefinedKey:]: this class is n开发者_如何学编程ot key value coding-compliant for the key max.'

I'm sorry if the answer is obvious and I'm missing the point, but I'd appreciate some insight into what I'm doing wrong; the Apple Documentation on this topic seems a little vague. Thanks!


You've misread the documentation. Your key path should be @"@max.order". Note the @ inside the string. @max is the collection operator.

You are right that the documentation has typographical errors though. Wherever you see valueForKeyPath"@count" or the like, you should mentally add a :@ before the string, which turns it into valueForKeyPath:@"@count".


Interesting, I never realized the examples in that doc were wrong. The semicolon and @ are missing.

The syntax you want is this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜