我只是在另一个话题回答了这个问题,一个似乎是死了,所以我会在这里回答:
您应该能够通过创建具有指针令牌包装类模拟删除委托回所有者以及被包装的对象:
@protocol TokenWrapperDelegate
-(void)tokenWasDeleted:(id)token;
@end
@interface TokenWrapper : NSObject {
id<TokenWrapperDelegate> owner;
id token;
}
-(id)initWithWrappedToken:(id)token owner:(id<TokenWrapperDelegate>)owner;
@property (nonatomic, weak) id<TokenWrapperDelegate> owner;
@property (nonatomic, strong) id token;
@end
然后让TokenWrapper的dealloc通知车主令牌被删除:
@implementation TokenWrapper
...
-(void)dealloc {
[owner tokenWasDeleted:self.token];
self.token = nil;
[super dealloc];
}
@end
然后在你的representedObjectForEditingString
回调中,返回一个自动发布的包装器,指向你的所有者和你的真实令牌。您还必须确保更改其他NSTokenField委托回调来深入了解包装器对象。 当您手动更改NSTokenField的内容时(比如通过调用setObjectValue),确保所有者设置了一些忽略这些回调的位。
对不起,我感到困惑。假设我想在从字段中删除标记字符串时收到通知,这是正确的。您的TokensNeedCleaning标志设置听起来像是一个合理的解决方案。 但是我遇到了一个新问题。为了确定哪些标记字符串已被删除,我需要将保存的值与表单值进行比较。当我通过在我的NSTokenField上调用objectValue来获取我的表单值时,它的委托被发送tokenField:representObjectForEditingString:它被设置为保存一个新的标记。 – tassock 2010-12-06 07:26:35
我发现objectValue不会触发tokenField :representObjectForEditingString:如果在textDidEndEditing中调用。我为我的NSTokenField设置了创建和删除功能。感谢您的指导! – tassock 2010-12-06 09:47:32