方案: 我有一个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来允许不同的表达式。
答案 0 :(得分:0)
你能做到:
- (id)valueForUndefinedKey:(NSString*)key
{
return [NSString stringWithFormat:@"%@:%@", [self.a valueForKey:key], [self.b valueForKey:key]];
}
答案 1 :(得分: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];
}
直接输入浏览器,因此请注意拼写错误