5

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

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

我最好将它包装成一个单例类并以这种方式传递,每次登录似乎都过大了,还是我错过了一种非常明显的方式来共享这个对象

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

4

3 回答 3

6

如果您要跨多个对象共享引擎,那么您可能希望有一些其他对象/单例包装引擎并充当其唯一代表。如果您已经完成了数据库编程,那么将其视为数据库连接——您可能不会让每个视图控制器创建自己的数据库连接。相反,您将创建某种由视图共享的数据管理器对象,并可能抽象出一些 DB 内部结构。

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

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

于 2011-05-09T06:13:20.793 回答
2

实际上,你可以。委托,只不过是 MGTwitterEngine 中的一个变量。只需在下一个视图控制器中添加它的一个实例,添加正确的标题和实现调用。安装新的视图控制器集后:

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

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

希望对您有所帮助...祝您好运!

于 2011-05-05T19:59:01.747 回答
0

在委托中使用 NSNotifications。

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

于 2012-07-20T01:42:21.293 回答