题
我有一个NSCollectionView和视图是NSBox与标签和NSButton。我想双击或NSButton的点击来告诉控制器与NSCollectionViewItem的代表对象执行的操作。 View是已经创建子类的项目中,代码如下:
#import <Cocoa/Cocoa.h>
#import "WizardItem.h"
@interface WizardItemView : NSBox {
id delegate;
IBOutlet NSCollectionViewItem * viewItem;
WizardItem * wizardItem;
}
@property(readwrite,retain) WizardItem * wizardItem;
@property(readwrite,retain) id delegate;
-(IBAction)start:(id)sender;
@end
#import "WizardItemView.h"
@implementation WizardItemView
@synthesize wizardItem, delegate;
-(void)awakeFromNib {
[self bind:@"wizardItem" toObject:viewItem withKeyPath:@"representedObject" options:nil];
}
-(void)mouseDown:(NSEvent *)event {
[super mouseDown:event];
if([event clickCount] > 1) {
[delegate performAction:[wizardItem action]];
}
}
-(IBAction)start:(id)sender {
[delegate performAction:[wizardItem action]];
}
@end
我碰到的问题是,作为一个IBAction为,在-start的范围的唯一的东西是已在IB被结合的东西,所以委派和viewItem。这意味着,我不能在所表示的物体到达其发送到委托。
有没有解决这个有限的范围内的方式或更好的方法或所表示的对象的得到保持?
感谢。
解决方案
首先,你几乎不必子类的观点。
绑定不会做你认为 - 你想要的addObserver:forKeyPath:选项:背景:(你应该试着去了解什么-bind是寿)。
当你说“的关键似乎是它作为‘我觉得你真的很困惑......
原型’为NSCollectionViewItem视图”忘记IBOutlet中&IBAction为 - 他们没有任何意义,如果你不Interface Builder中。 “原型”意味着什么在Objective-C。
视图中的两种方法不具有不同的范围以任何方式 - 有在所有这些之间没有差别。它们是两种方法中,在各方面都等同除了他们的名字(当然代码它们包含)。
如果wizardItem为空在-start但具有值在-mouseDown这是完全与定时,它们被称为做。要么你有过很快消失或者你认为这是一个点尚未创建的对象。
您熟悉NSZombie?你会发现它是非常有用的。
不隶属于 StackOverflow