我得到一些奇怪的行为,我在Interface Builder中设置了一个标签,然后我将标签作为引用插座连接到文件。
@property (weak) IBOutlet NSTextField *TitleLabel;
当我访问文件中的标签(cell.TitleLabel.stringValue = title)并运行应用程序时,它无法识别它。我明白了:
-[NSApplication TitleLabel]: unrecognized selector sent to instance 0x608000101680
奇怪的是,它并不总是这样做,有时它可以正常工作和显示,有时则不然。
我刚刚开始搞乱IB,所以我可能会遗漏一些东西。有什么帮助吗?
答案 0 :(得分:0)
问题是View有时会被分配给NSApplication。我不确定启动视图的方式是否常见,但问题出在这段代码中:
NSArray * views;
[[NSBundle mainBundle] loadNibNamed:@"CollapseClickViewController" owner:nil topLevelObjects:&views];
CollapseClickCell * cell = [[CollapseClickCell alloc] initWithFrame:CGRectMake(0,0,320,50)];
cell = [views objectAtIndex:0];
问题是[views objectAtIndex:0]
有时会返回NSApplication
。为了解决这个问题,我只是针对自己检查了类,并通过以下方式返回了该对象:
-(CollapseClickCell*)assignCell:(CollapseClickCell*)cell withArray:(NSArray*)array{
for ( int i = 0; i< [array count]; i++) {
if ([[array objectAtIndex:i] class] == [CollapseClickCell class]) {
return [array objectAtIndex:i];
}
}
return nil;
}
然后我将它分配给对象:
cell = [cell assignCell:cell withArray:views];
这可能不是传统的做法,但它有效。如果有更好的技术或更常见的方法请赐教! :)