更改MGTwitterEngine的委托

时间:2010-06-02 10:37:28

标签: iphone objective-c ios twitter mgtwitterengine

我已经设置并使用扩展类MGTwitterEngine通过xAuth成功登录,我的问题是如果我想将其传递给另一个视图控制器,我该如何更改委托类,因为它是某种弱引用< / p>

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

我最好把它包装成一个单独的类并以这种方式传递,每次登录似乎有点过分,或者我错过了分享这个对象的一种非常明显的方式

目前我已经向MGTwitterEngine添加了一个setDelegate方法,但感觉好像我在不必要地对抗框架

3 个答案:

答案 0 :(得分:6)

如果您在多个对象之间共享引擎,那么您可能希望让其他对象/单例包装引擎并充当其唯一委托。如果您已经完成了数据库编程,那么可以将其视为数据库连接 - 您可能不会让每个视图控制器创建自己的数据库连接。相反,你会创建一些由视图共享的数据管理器对象,并可能抽象出一些数据库内部。

如果不同的视图控制器处理不同的任务 - 例如登录,查找用户,查询消息等,那么包装器中的委托方法应该能够将响应传递给相应的视图控制器。

如果您有不同的视图控制器调用相同的方法(如果是,为什么?),您仍然可以将响应路由回相应的视图控制器。正如MGTwitterEngine文档所说,“每个Twitter API方法返回一个NSString,它是该连接的唯一标识符。”您只需要传递一个对象(您的视图控制器)或一个块作为额外的每个包装方法的参数。当包装器发送响应时,您可以将twitter id字符串和此对象/块缓存在可变字典中,然后在处理响应时查找缓存中的连接ID。

答案 1 :(得分:2)

实际上,你可以。 代表,只不过是MGTwitterEngine中的一个变量。只需在下一个视图控制器中添加一个实例,添加正确的标头和inplementation调用。 在设置新视图控制器集后:

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

然后调用nextViewController。 返回时,请不要忘记将委托设置回原始视图控制器(在viewDidAppear或viewWillAppear上)

希望有帮助...... 祝你好运!

答案 2 :(得分:0)

在代理中使用NSNotifications。

使视图控制器在您希望委托添加观察者的位置。让MGTwitterEngine的委托方法发布通知。