我有一个包含NSTextView的几个实例一的NSView。 我想获得每个实例的内容(字符串)。 到目前为止,我有这个(此代码不编译):
for(NSView *view in [self subviews]) {
NSLog(@"class: %@ ", [view className]);
if([view isKindOfClass:[NSTextView class]])
NSLog(@"[view string] %@",[view string]);}
在这一点上,我希望能够发送string
消息, view
是NSTextView的实例,但是:
Error message: No visible @interface for 'NSView' declares the selector 'string'
哪里是我的错误?
你可能只需做一个简单的铸件,让编译器的接受。 你可以用任何一个局部变量,或更复杂的内联投做到这一点:
for(NSView *view in [self subviews]) {
NSLog(@"class: %@ ", [view className]);
if([view isKindOfClass:[NSTextView class]]) {
NSTextView *thisView = (NSTextView *)view;
NSLog(@"[view string] %@",[thisView string]);
}
}
要么
for(NSView *view in [self subviews]) {
NSLog(@"class: %@ ", [view className]);
if([view isKindOfClass:[NSTextView class]])
NSLog(@"[view string] %@",[(NSTextView *)view string]);
}
编辑:我西港岛线提就是我们所说的“鸭打字” ......如果它响应您要发送的选择,您可以考虑要求的对象,而不是它是否是你期待(如果它叫起来像鸭子之类的,它是鸭子...)。
for(NSView *view in [self subviews]) {
NSLog(@"class: %@ ", [view className]);
if([view respondsToSelector:@selector(string)]) {
NSLog(@"[view string] %@",[view performSelector:@selector(string)]);
}
}