相关疑难解决方法(0)

使用NSManagedObject的keyPathsForValuesAffecting

Bonjour,我想把一个客观的练习从Aaron的书翻译成快速但我无法找到解决方案.Objective'c代码是:

@dynamic firstName;
@dynamic lastName;
@dynamic department;

+ (NSSet *)keyPathsForValuesAffectingFullName
{
    return [NSSet setWithObjects:@"firstName", @"lastName", nil];
}

- (NSString *)fullName
{
    NSString *first = [self firstName];
    NSString *last = [self lastName];
    if (!first)
        return last;
    if (!last)
        return first;
    return [NSString stringWithFormat:@"%@ %@", first, last];
}
Run Code Online (Sandbox Code Playgroud)

我在开发人员文档中找到了一个函数,但我无法理解如何实现此代码.

更明确一点,这是Apple doc

一对一的关系

要为一对一关系自动触发通知,您应该覆盖keyPathsForValuesAffectingValueForKey:或者实现一个合适的方法,该方法遵循它为注册依赖键定义的模式.

例如,人的全名取决于名字和姓氏.返回全名的方法可以写成如下:

- (NSString *)fullName {
    return [NSString stringWithFormat:@"%@ %@",firstName, lastName];
}
Run Code Online (Sandbox Code Playgroud)

当firstName或lastName属性发生更改时,必须通知观察fullName属性的应用程序,因为它们会影响属性的值.

一种解决方案是覆盖keyPathsForValuesAffectingValueForKey:指定人员的fullName属性依赖于lastName和firstName属性.清单1显示了这种依赖的示例实现:

清单1 keyPathsForValuesAffectingValueForKey的示例实现:

+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {

    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];

    if ([key isEqualToString:@"fullName"]) { …
Run Code Online (Sandbox Code Playgroud)

swift swift-extensions

5
推荐指数
1
解决办法
2791
查看次数

标签 统计

swift ×1

swift-extensions ×1