0

场景:我有一个 NSObject 'A' 分别代表另外两个 NSObject 'B 和 C' 之间的关系。B 和 C 都有使用 KVC 检索的属性(NSStrings)。

我想在“A”访问器的主体中使用 NSExpression 来派生复合字符串。所以:

[B valueForKey:@"oneString"] returns 'Foo'
[C valueForKey:@"oneString"] returns 'Bar'
// And I would like to dynamically form
[A valueForKey:@"oneString"] returns 'Foo:Bar'

我知道很明显,'stringWithFormat'但我需要使用在运行时确定的不同 keyPaths 来允许不同的表达式。

4

2 回答 2

0

你能做到吗:

- (id)valueForUndefinedKey:(NSString*)key
{
    return [NSString stringWithFormat:@"%@:%@", [self.a valueForKey:key], [self.b valueForKey:key]];
}
于 2013-04-30T12:23:49.183 回答
0

只是将评论中的想法拼写成更完整的答案:

您可以定义oneString为只读属性:

@property (readonly) NSString* oneString;

然后定义一个自定义访问器:

- (NSString *)oneString {
      // ... do your logic here
      NSString *firstStr = ...
      NSString *secondStr = ...
      return [NSString stringWithFormat:@"%@:%@", firstStr, secondStr];
}

+ (NSSet *) keyPathsForValuesAffectingOneString {
     return [NSSet setWithObjects: @"self.a", @"self.b", @"self.c", nil]; 
}

直接在浏览器中输入,所以要小心拼写错误

于 2013-04-30T12:53:15.113 回答