Cocoa Outlets表现得很奇怪,不会识别选择器

时间:2015-01-17 12:47:10

标签: objective-c cocoa data-binding reference

我得到一些奇怪的行为,我在Interface Builder中设置了一个标签,然后我将标签作为引用插座连接到文件。

@property (weak) IBOutlet NSTextField *TitleLabel;

当我访问文件中的标签(cell.TitleLabel.stringValue = title)并运行应用程序时,它无法识别它。我明白了:

-[NSApplication TitleLabel]: unrecognized selector sent to instance 0x608000101680

奇怪的是,它并不总是这样做,有时它可以正常工作和显示,有时则不然。

我刚刚开始搞乱IB,所以我可能会遗漏一些东西。有什么帮助吗?

1 个答案:

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

这可能不是传统的做法,但它有效。如果有更好的技术或更常见的方法请赐教! :)