2014-03-30 48 views
0

sourceObject和destinationObject都是SameClass的實例。 SameClass是一個Singleton。基本上相同的對象通過兩個不同的名稱,並在方法級別具有不同的行爲。我有幾行代碼: (這裏有一個對稱的,我需要他們調用相同的方法,但在兩種不同情況下的兩個不同位置)NSInvocation - 如何確定郵件的內容來自forwardInvocation:

//some code in some place 
    [singleton1Object increase: 20]; 


//some code in a completely different place 
    [singleton2Object increase: 40]; 

無論singleton1Object或singleton2Object實現增加:相反,他們都用它來指示消息中的每個在它們各自的方向(其他對象)

forwardInvocation 
- (void)forwardInvocation:(NSInvocation *)anInvocation 
{ 
    //determine where the message came from 
} 

是否有任何方式來確定代碼singleton1Object或singleton2Object最初接收增加的哪個部分:和鹼我的決定在哪裏路由,上那,從內部forwardInvocation:?

注意:Singleton發送消息給自己,他既是發送者也是接收者。他通過代碼中的兩個或多個名字來引用自己,存儲在兩個變量中,他一直這樣做直到從方法到方法得到一個他不明白的情況,在這種情況下,他將該消息轉發給另一個對象。我在代碼中的位置,主要由singleton1Object和singleton2Object或其他一些技術決定我應該在哪裏轉發消息。編輯該問題請參閱編輯以獲取更多詳細信息。

+0

您是否試圖讓發件人提前或轉發? – CodaFi

+0

Singleton向自己發送消息,他既是發送者又是接收者。他一直這樣做,直到找到一種他不明白的方法,在這種情況下,他會將消息轉發給另一個對象。我在代碼中的位置,主要由singleton1Object和singleton2bject確定,它提供了我應該在哪裏轉發消息的線索。編輯該問題請參閱編輯以獲取更多詳細信息。 – unmircea

+0

我建議改變你的設計,而不是試圖解決這個混亂的道路。一個對象用_兩個不同的名稱來引用自己,這兩個對我來說都不是「自我」;這意味着你可能不應該有一個單例,而是一個類的兩個實例,或者甚至可能是兩個單獨的派生類。 –

回答

0

forwardInvocation,self是消息的接收者。

調用對象不包含有關郵件的初始發件人的信息。

+0

嗯...我正在看從消息發送的地方獲取一些信息。 [anInvocation target]包含的是什麼? – unmircea

+0

@unmircea:我正在寫這個電話,所以目前我不能告訴你更多。也許我誤解了你的問題。你有沒有嘗試檢查「自我」? –

+0

沒關係,我更新了我的問題,提供了更多有關我奇怪的困境的更多細節。慢慢來... – unmircea