我已经设置并使用扩展类MGTwitterEngine通过xAuth成功登录,我的问题是如果我想将其传递给另一个视图控制器,我该如何更改委托类,因为它是某种弱引用< / p>
@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> {
__weak NSObject <MGTwitterEngineDelegate> *_delegate;
我最好把它包装成一个单独的类并以这种方式传递,每次登录似乎有点过分,或者我错过了分享这个对象的一种非常明显的方式
目前我已经向MGTwitterEngine添加了一个setDelegate方法,但感觉好像我在不必要地对抗框架
答案 0 :(得分:6)
如果您在多个对象之间共享引擎,那么您可能希望让其他对象/单例包装引擎并充当其唯一委托。如果您已经完成了数据库编程,那么可以将其视为数据库连接 - 您可能不会让每个视图控制器创建自己的数据库连接。相反,你会创建一些由视图共享的数据管理器对象,并可能抽象出一些数据库内部。
如果不同的视图控制器处理不同的任务 - 例如登录,查找用户,查询消息等,那么包装器中的委托方法应该能够将响应传递给相应的视图控制器。
如果您有不同的视图控制器调用相同的方法(如果是,为什么?),您仍然可以将响应路由回相应的视图控制器。正如MGTwitterEngine文档所说,“每个Twitter API方法返回一个NSString,它是该连接的唯一标识符。”您只需要传递一个对象(您的视图控制器)或一个块作为额外的每个包装方法的参数。当包装器发送响应时,您可以将twitter id字符串和此对象/块缓存在可变字典中,然后在处理响应时查找缓存中的连接ID。
答案 1 :(得分:2)
nextViewController._mgTwitterEngine = self.mgTwitterEngine;
nextViewController.mgTwitterEngine.delegate=nextViewController;
然后调用nextViewController。 返回时,请不要忘记将委托设置回原始视图控制器(在viewDidAppear或viewWillAppear上)
希望有帮助...... 祝你好运!
答案 2 :(得分:0)
在代理中使用NSNotifications。
使视图控制器在您希望委托添加观察者的位置。让MGTwitterEngine的委托方法发布通知。