2010-09-23 55 views
4

是否可以在拖放操作中將指針傳遞給對象?在拖放操作中傳遞對象指針

這裏的情景......

我有自定義對象的「NSArray的」。爲了參數,我們會說這是一個人物對象列表。

該列表通過NSArrayController綁定到NSTableViewNSTableView是一個拖動源,我有一個NSView作爲拖動目標。

實施拖放操作時,我可以在拖動過程中輕鬆地從NSArrayController獲取當前選定人員的姓名,並將其傳遞給NSView中的接收人,作爲NSString

但是,我希望能夠將指針傳遞給person對象,以便接收者可以訪問整個對象。

問題似乎是,拖動操作創建人物對象的新實例,儘管在人物模型中實現了所需方法,但並未引用所選人物對象。因此,我在目的地得到一個人物對象,它只是不填充來自對象的數據。

理想情況下,我想要對象指針,因爲NSView將使用對象引用,以便對象本身的任何更新都反映在NSViewNSTableView(以及使用該對象的任何其他位置)中。

它甚至可以在拖放操作中使用對象引用,還是需要傳遞一些自定義引用,它是人物對象的iVar,然後在到達目的地後執行查找? (這對我考慮Obj-c有多少對象引用似乎有點過時)。

我知道一個目標可以接受來自應用程序外部的拖動操作,但是將操作指定爲本地操作會解釋這種情況嗎?

我檢查了蘋果文檔,但仍似乎無法找到答案。

Drag and Drop Programming Topics

Pasteboard Programming Guide

任何和所有幫助非常感謝。

回答

3

粘貼板只是不同類型數據的容器,所以無論您放在粘貼板上,都必須將其轉換爲某種類型的數據。

您需要的是給每個Person對象一個標識符,並將它放在自定義發明的類型標識符下的粘貼板上。一般來說,這樣的標識符應該是你的應用程序的包標識符(應該是你的域名加上你的應用程序名稱的反面 - 例如com.example.surfwriter)加上類型名稱(例如,com.example.surfwriter .tabstop)。

收到放置時,請檢查此類型。如果存在,請查找正確的對象,並執行您應有的任何操作。從表視圖拖動到同一個表視圖應通過將對象移動或複製到新行來實現此目的。

不要使用對象的地址 - 即對象本身 - 作爲它的標識符。如果對象死亡(例如,被刪除),則地址將不再有效,或者可能引用不同的對象(其可能與原始對象的類別相同或不同)。使用你可以查找並安全找不到的東西。這適用於剪切/複製和粘貼多於拖動,但你可以並且應該使用幾乎相同的代碼處理兩者。

+0

謝謝彼得!看起來我正盯着正確的道路 - 只是沒有走得太遠而已。很高興知道不使用對象本身的地址 - 我只是在研究這是否是一種可行的選擇。時機就是一切! :-) – Hooligancat 2010-09-23 05:04:26

+0

彼得,只是爲了讓你知道,工作完美。 :-) 謝謝!!我結束了在我擁有的全局方法類中創建標識符前綴。然後每個模型都有一個'pasteboardRef'方法,它返回它自己的類名和對象的唯一ID。然後,它通過粘貼板發送並拾取到目的地並解析出來,以返回類和ID。發揮魅力! – Hooligancat 2010-09-24 21:24:36