NSExpression连接两个KVC字符串

时间:2013-04-30 11:17:06

标签: objective-c core-data

方案: 我有一个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来允许不同的表达式。

2 个答案:

答案 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]; 
}

直接输入浏览器,因此请注意拼写错误