2009-06-09 89 views
1

我使用Cocoa綁定來管理對象表。我理解綁定是如何工作的,但我遇到了一個小問題。管理對象表格會很好用,除了那些對象必須管理實際的藍牙硬件之外。我正在開發一個框架,該框架提供了一個表示與這個硬件連接的類,並且讓另一個「管理器」類使它符合鍵值。換句話說,這個管理器類必須能夠在其屬性字典中連接和修改其「連接」狀態,成爲該硬件的代表並修改屬性,然後通過更改所做的更改來更新硬件。然而,無論何時我在對象本身中設置新值(例如在將「連接」鍵的值更改爲2(查找)(即propertiesDict = newDict)的「連接」方法)中,該更改似乎並不是由觀察員拿起,它是必然的。我查看了NSKeyValueObservingProtocol中的observeValueForKeyPath:ofObject:change:context:。但是,我不知道如何處理上下文參數。可可綁定:自定義setter方法?

我希望這是有道理的......但如果任何人有任何想法,我很樂意聽到他們。

+0

您可能必須向我們展示一些代碼。從描述中確切地說明發生了什麼很難。一般來說,鍵值編碼兼容適配器類並不難實現,所以我相信我們可以提供幫助。 – 2009-06-09 07:17:39

回答

2

您的問題並不完全清楚,但如果我正確理解問題,則可能是因爲您需要在更改嵌入對象中的值之前和之後發送手動KVO通知。例如,[self willChangeValueForKey:@"connected"];[self didChangeValueForKey:@"connected"];

+0

我同意。這聽起來像是你正在賦值一個新的值給實例變量,該實例變量表示來自setter外部的屬性。在這種情況下,KVO通知將不會自動發送。可可非常聰明,但不夠聰明,不能認識到這項任務等同於對關鍵價值的改變。您將需要使用willChangeValueForKey:和didChangeValueForKey將分配括在實例變量中: – Alex 2009-06-09 14:21:32

0

有三種方式來更新一個韓國國際志願者組織兼容的方式屬性/屬性:

  1. 使用屬性的setter(由@synthesize@property聲明中指定或生成)
  2. 前後調用-willChangeValueForKey:-didChangeValueForKey:您以任何方式更改屬性值。
  3. 調用-setValueForKey:
相關問題