gpt4 book ai didi

cocoa - 如何使用setValue :forKeyPath and valueForKeyPath

转载 作者:行者123 更新时间:2023-12-03 16:58:40 25 4
gpt4 key购买 nike

我是另一个初学者,试图了解 Cocoa 及其复杂性。我正在读德沃的《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;
}
<小时/>

字符串2为空!

我不明白这个。据我了解,当使用 @property 时,所有代码都将变得符合 KVC 标准。但似乎关键路径不起作用。

最佳答案

foo.bar 为 nil(您尚未为 bar 设置值),因此您的 KVC 访问器将默默失败或返回 nil - 键路径消息的值本质上被分解为单独的访问器,如果路径上的任何内容不存在,则路径不完整。

创建一个新的 Bar 对象并将其分配给 foo.bar,然后您的关键路径代码将起作用。

关于cocoa - 如何使用setValue :forKeyPath and valueForKeyPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9987653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com