我已经使用MGTwitterEngine的扩展类通过xAuth进行了设置并成功登录,我的问题是,如果我想将它传递给另一个视图控制器,我如何更改委托类,因为它是某种弱引用
@interface MGTwitterEngine : NSObject <MGTwitterParserDelegate> {
__weak NSObject <MGTwitterEngineDelegate> *_delegate;我是不是最好把它包装成一个单例类并以这种方式传递,似乎每次登录都有点夸张,还是我错过了一种艰难而显而易见的共享这个对象的方式
目前,我已经向MGTwitterEngine添加了一个setDelegate方法,但感觉好像是在与框架进行不必要的斗争
发布于 2011-05-09 14:13:21
如果您在多个对象之间共享引擎,那么您可能希望有其他一些对象/单例来包装引擎,并充当其唯一的代理。如果您已经进行过数据库编程,那么可以将其视为一个数据库连接--您可能不会让每个视图控制器创建自己的数据库连接。相反,您将创建某种数据管理器对象,该对象由视图共享,并可能抽象出一些DB内部结构。
如果不同的视图控制器处理不同的任务--比如登录、查找用户、查询消息等,那么包装器中的委托方法应该能够将响应传递给适当的视图控制器。
如果您有不同的视图控制器调用相同的方法(如果是这样,为什么?),您仍然可以将响应路由回相应的视图控制器。正如MGTwitterEngine文档所说,“每个Twitter API方法返回一个NSString,该for是该连接的惟一标识符。”您只需要将一个对象(视图控制器)或一个块作为额外的参数传递给每个包装的方法即可。当包装器发送响应时,您可以在可变字典中缓存twitter id字符串和此对象/块,然后在处理响应时在缓存中查找连接id。
发布于 2011-05-06 03:59:02
实际上,你可以的。委托只是MGTwitterEngine中的一个变量。只需在下一个视图控制器中添加它的一个实例,添加适当的头和实现调用。在实例化新的视图控制器集之后:
nextViewController._mgTwitterEngine = self.mgTwitterEngine;
nextViewController.mgTwitterEngine.delegate=nextViewController;然后调用nextViewController。当您返回到委托(在viewDidAppear或viewWillAppear上)时,不要忘记将委托设置回原始视图控制器
希望这能帮上忙。祝你好运!
发布于 2012-07-20 09:42:21
在代理中使用NSNotifications。
在您希望代理的位置创建视图控制器,添加一个观察者。让MGTwitterEngine的委托方法发布通知。
https://stackoverflow.com/questions/2956852
复制相似问题