我只是在另一個話題回答了這個問題,一個似乎是死了,所以我會在這裏回答:
您應該能夠通過創建具有指針令牌包裝類模擬刪除委託回所有者以及被包裝的對象:
@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