NSTextView,绑定和显示NSString

8

我第二天开始使用Cocoa。我已经设置好了一个NSTextView,它的属性字符串被绑定到一个NSArrayController上(我正在使用Core Data):

controller key: selection
model key path: myString

我了解到NSTextView需要NSAttributedString,因此在尝试设置属性值时会抛出异常。

NSInvalidArgumentException', reason: 'Unacceptable type of value for attribute: property = "myString"; desired type = NSString; given type = NSConcreteAttributedString; 

有什么办法可以使我的managedObject的NSString属性显示在NSTextView中吗?

你能展示一下你如何设置属性的值吗?只需要展示设置值的方法即可。 - TheAmateurProgrammer
@theAmateurProgrammer,属性已设置:[object setValue:@"Some text" forKey:@"title"];。与我在问题中描述的过程完全相同,适用于textField,但不适用于textView。 - nathan
2
既然您没有使用属性字符串,为什么要绑定文本视图的属性字符串?您可以绑定值而不是属性字符串,这是一个简单的字符串。不需要值转换器。 - user557219
2个回答

17

您可以将NSString绑定到NSTextView的value而不是attributedString。为此,您需要在NSTextView中关闭“富文本”。

注:原文中的代码标记已经被保留。

2
是的。正如文档中所述,只有在文本视图使用单个字体时,值绑定才可用。 - paulmelnikow

4
您可以使用NSValueTransformer子类来进行前后转换。
@interface XXStringTransformer: NSValueTransformer {}
@end

@implementation XXStringTransformer
+ (Class)transformedValueClass 
{   
    return [NSAttributedString class]; 
}
+ (BOOL)allowsReverseTransformation 
{ 
    return YES; 
}
- (id)transformedValue:(id)value 
{
    return (value == nil) ? nil : [[[NSAttributedString alloc] initWithString:value] autorelease];
}

- (id)reverseTransformedValue:(id)value
{
    return (value == nil) ? nil : [[(NSAttributedString *)value string] copy];
}

@end

注意事项 - 这可能是倒置的,反转器可能会泄漏。我刚刚制作了它,但它应该指向正确的方向。如果有误,请告诉我,我会纠正答案。

您可以在绑定面板中键入类名XXStringTransformer,也可以通过编程方式实现。


很棒。我对工具不是太熟练,但从我所看到的没有泄漏。 - nathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接