Я еще один новичок, пытающийся разобраться в Какао и его тонкостях. Я читал "Objective-C" Девоя. В разделе, посвященном кодированию значения ключа, есть несколько примеров setValue:forKeyPath:
. Как-нибудь, попробуй, как я мог, я не могу заставить его работать.
Следующий код:
// Bar.h
// UsingKVC
//
// Created by Stephen Ng on 2/04/12.
// Copyright (c) 2012 Nutek. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Bar : NSObject
{
NSArray *array;
NSString *stringOnBar;
}
@property (retain,nonatomic) NSArray *array;
@property (retain,nonatomic) NSString *stringOnBar;
@end
@interface Foo : NSObject
{
Bar *bar;
NSString *stringOnFoo;
}
@property (retain,nonatomic) Bar *bar;
@property (retain,nonatomic) NSString *stringOnFoo;
@end
//
// Bar.m
// UsingKVC
//
// Created by Stephen Ng on 2/04/12.
// Copyright (c) 2012 Nutek. All rights reserved.
//
#import "Bar.h"
@implementation Bar
@synthesize array;
@synthesize stringOnBar;
@end
@implementation Foo
@synthesize bar;
@synthesize stringOnFoo;
@end
//
// main.m
// UsingKVC
//
// Created by Stephen Ng on 2/04/12.
// Copyright (c) 2012 Nutek. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Bar.h"
int main (int argc, const char * argv[])
{
@autoreleasepool {
Foo *foo = [[Foo alloc] init];
[foo setValue:@"blah blah" forKey:@"stringOnFoo"];
NSString *string = [foo valueForKey:@"stringOnFoo"];
NSLog(@"string: %@", string);
[foo setValue:@"The quick brown fox" forKeyPath:@"bar.stringOnBar"];
NSString *string2 = [foo valueForKeyPath:@"bar.stringOnBar"];
NSLog(@"string2: %@",string2);
}
return 0;
}
string2 НЕДЕЙСТВИТЕЛЕН!
Я не понимаю этого. Я понимаю, что при использовании @property
весь код становится KVC-совместимым. И все же кажется, что ключевой путь не работает.