2013-03-20 113 views
1

目前我正在開發一個iOS項目。其中我有兩個從同一類派生的視覺上相似的對象。想我要的是,當我做一個對象上需要改變相同的對象2.更改一個對象應該會影響同一類的其他對象

詳細一些變化:

我有一個類MyClassobj1obj2MyClass的。當我在obj1上執行某些操作時,它會調用obj1的相應代理方法。現在我想要的是當obj1調用它的委託方法時,我還需要調用obj2的委託方法。相同:如果我更改obj2它會影響obj1。我還需要在將來添加更多元素。

我做了什麼:

我添加了一個單例類,並放置在其上的陣列,並添加的對象了這一點。

而且在委託方法:

- (void)delegateMethod:(id)param 
{ 
    NSMutableArray *arr = [[MySingleTon sharedObject] getArray]; 
    for(int loop = 0;loop<[arr count];loop++) 
    { 
     if(![arr objectAtIndex] == self) 
     { 
      [[arr objectAtIndex:loop] delegateMethod:param]; 
     } 
    } 
} 

發生了什麼事是:

但問題是它會導致一個無限循環。 Obj2會做同樣的事情,所有其他的對象也會做同樣的事情。我被困在這裏,我有大約25個委託方法,需要實現相同的功能。我無法通過添加額外參數來更改委託方法。

有沒有解決方案?請提前幫助,幫助我。

爲什麼我需要這個/實際執行:

我創建了可縮放自定義視圖/旋轉等我創建相同類的兩個對象,並把它添加到我的父視圖。現在,當我在視圖1上更改任何內容時,它應該改變視圖2中的相似內容。我還需要添加更多視圖。

回答

0

你可以做一件事。當您在Object1中進行更改時,則手動調用Object2的委託方法。因此,當您手動調用Object2的委託方法時,您已經在該委託方法中擁有參數,因此在參數列表中添加一個參數,該參數將指示從哪個對象調用此方法。所以通過使用這個參數,如果你的主object1被改變了,並且你手動調用了Object2的委託方法,並且通過提出條件你就可以解決問題。

希望這會幫助你。

如果你仍然想要我的任何幫助,請點擊這裏。

所有最優秀的!

+0

從哪裏我調用其他對象的委託方法?此外,我將在未來添加更多同類的對象。那麼處理起來會很困難(增加個人通話)。 – 2013-03-20 10:38:02

1

基本上,因爲你想要兩個不同的對象指向完全相同的狀態,所以你應該在第三個對象上指出這兩個對象 - 是靜態的基類或靜態的第三類,或者是單例。這具有Object1不必知道Object2的好處,這意味着如果您添加Object3,則無需更改代碼。

因此,只要您的對象寫入共享狀態,即可以讀取新值。如果你希望對象在變化時立即改變,那麼你需要實現事件(我假定iOS有),以便讓Object1和Object2訂閱共享狀態的變化。

我不知道的iOS,但在pseduocode ...

abstract class BaseClass { 
protected static sharedArray = new sharedArray(); 

    void someMethod(int i, int aNewValue) { 
    BaseClass.sharedArray[i] = aNewValue; 
    } 

    int getSharedValue(int i) { 
    return BaseClass.sharedArray[i]; 
    } 
} 

class ObjectOne extends BaseClass { 

} 

class ObjectTwo extends BaseClass { 

} 

請注意,這不是線程安全的,是有點可怕,但它可能爲你指明正確的方向。這將是更爲整潔,(但仍然不是線程安全的),如果你引用的狀態是由一個單獨的每個對象的引用舉行

//this isn't written as a singleton 
class MySingleton { 
    private SharedArray sharedArray = new sharedArray(); 

    void someMethod(int i, int aNewValue) { 
     BaseClass.sharedArray[i] = aNewValue; 
    } 

    int getSharedValue(int i) { 
     return BaseClass.sharedArray[i]; 
    } 
} 

class ObjectOne extends MyCustomViewObjectThing { 
    private MySingleton mySingleton 

    void doMyChangeActivity(int i) { 
     mySingleton.someMethod(i, i); 
    } 
} 

class ObjectTwo extends MyCustomViewObjectThing { 
    private MySingleton mySingleton 

    void doMyChangeActivity(int i) { 
     mySingleton.someMethod(i, i*2); 
    }  
} 

我知道這個代碼是可怕的,但它只是爲了說明我的意思:-)

相關問題