1

所以,我有这个:

@interface Foo
@property(nonatomic, readonly, retain) NSArray* bars;
@end

@implementation Foo
@synthesize bars = _bars;
// ... more stuff here ...
@end

所以Foo充满了bars的实例Bar,并且 的实例Foo存在于容器对象中。然后我说:

[container valueForKeyPath:@"foo.bars.@count"]

我希望能给我一个很好的盒装号码。但是我反而得到:

Exception: [<Bar 0xc175b70> valueForUndefinedKey:]: this class is not key value coding-compliant for the key bars.

所以为什么?我不希望必须实现任何特殊的东西Bar才能使NSArrayof Bars 可数,但这就是这个错误消息所暗示的。该文档只有一些琐碎的示例,但我希望它能够以相同的方式工作。

4

1 回答 1

1

我的代码与您的代码有何不同?因为这行得通...

//  Foo.h
#import <Foundation/Foundation.h>

@interface Foo : NSObject
@property(nonatomic, readonly, retain) NSArray* bars;
@end


//  Foo.m
#import "Foo.h"

@interface Foo ()
// extended property decl here, to be readable, but this didn't seem to matter in my test
@property(nonatomic, retain) NSArray* bars;
@end


@implementation Foo

- (id)init {

    self = [super init];
    if (self) {
        _bars = [NSArray arrayWithObjects:@"bar one", @"bar none", nil];
    }
    return self;
}

@end

然后,在我的容器类中:

// .h
@property (strong, nonatomic) Foo *foo;

// .m
_foo = [[Foo alloc] init];
NSNumber *c = [self valueForKeyPath:@"foo.bars.@count"];
NSLog(@"count is %@", c);

日志 => “计数为 2”

于 2013-02-13T17:35:45.853 回答