2010-06-02 41 views
5

我已經安裝並使用擴展類MGTwitterEngine的成功登錄通過XAUTH的代表,我的問題是,如果我想這個傳遞給另一個視圖控制器,我怎麼能更改委託類,因爲它是一些有點弱引用更改MGTwitterEngine

@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> { 
__weak NSObject <MGTwitterEngineDelegate> *_delegate; 

我是最好的總結這個成一個單獨的類,並通過周圍的方式,似乎矯枉過正每次在登錄,或者有我錯過了分享各地

此對象的一個​​精心明顯的方法

目前,我已經添加了一個setDelegate方法將MGTwitterEngine但感覺好像我戰鬥的框架ü nnecessarily

+0

我也很想知道這個答案。我希望你能夠在每個請求中指定委託。 – Camsoft 2011-04-28 21:23:38

回答

6

如果要共享跨越多個對象的引擎,那麼你會希望有一些其他的對象/單包住發動機,並作爲其唯一代表。如果你已經完成了數據庫編程,那麼把它看作是一個數據庫連接 - 你可能不會讓每個視圖控制器創建自己的數據庫連接。相反,您會創建一些由視圖共享的數據管理器對象,並可能將一些數據庫內部元素抽象出來。

如果不同的視圖控制器處理不同的任務 - 就像登錄,查找用戶,查詢信息等。然後在包裝的委託方法應該能夠通過獲得的響應到相應的視圖控制器。

如果你有不同的視圖控制器調用相同的方法(如果是這樣,爲什麼?),你仍然可以將響應路由回相應的視圖控制器。正如MGTwitterEngine文檔所述,「每個Twitter API方法都會返回一個NSString,它是該連接的唯一標識符。」你只需要將一個對象(你的視圖控制器)或一個塊作爲一個額外的參數傳遞給你的每個包裝方法。當包裝器發送響應時,可以將twitter id字符串和此對象/塊緩存在可變字典中,然後在處理響應時查找緩存中的連接標識。

+1

我開始思考那些線。對於MGTwitterEngine有一個委託,並將結果路由回正確的視圖/視圖控制器是完全合理的。非常感謝! – Camsoft 2011-05-10 09:11:54

+0

去年我在做一個小項目時,我得出了同樣的結論。我最終實現了一個'subscribe:(id)target toResultsOf:(NSString)connectionId'方法,它使用NSMutableDictionary來存儲訂閱。一旦委託人收到結果,它就會查找目標,將數據轉發給控制器中具有相同簽名的方法,並刪除訂閱。 – freeatnet 2011-05-12 05:19:38

2

其實,你可以。代理,不過是MGTwitterEngine中的一個變量。只需在下一個視圖控制器中添加一個實例,添加適當的頭文件和實例調用。 後instatiating新視圖控制器組:

nextViewController._mgTwitterEngine = self.mgTwitterEngine; 
nextViewController.mgTwitterEngine.delegate=nextViewController; 

然後調用nextViewController。 不要忘記設置委託回原來的視圖控制器,當您返回到它(無論是在viewDidAppear或viewWillAppear中)

希望幫助... 好運!

+0

只是想知道如果應用程序使用同一個twitter引擎對象從不同的控制器同時發出一些異步的Twitter請求,那將是怎樣的工作。基本上我可以看到所有請求都返回到上次註冊的代表。真的應該通過請求發送嗎? – Camsoft 2011-05-06 19:32:19

+0

回覆將返回上次註冊的代表...或者你必須在每一個將要使用mgTwitterEngine的類中使用它,或者你可以使用單例方法,呃甚至可以嘗試使用一個只通過通知中心來處理答案的單例... – Marsson 2011-05-10 17:16:37

0

使用NSNotifications的委託。

使視圖控制器在希望代理添加觀察者的位置。讓MGTwitterEngine的委託方法發佈通知。