代码之家  ›  专栏  ›  技术社区  ›  kgutteridge

更改mgtwitterengine的委托

  •  5
  • kgutteridge  · 技术社区  · 14 年前

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

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

    我是不是最好把它包装成一个单独的类,然后通过这种方式传递,每次登录都显得杀伤力过大,还是我错过了一个非常明显的共享这个对象的方式?

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

    3 回复  |  直到 12 年前
        1
  •  6
  •   skue    13 年前

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

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

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

        2
  •  2
  •   Marsson    13 年前

    实际上,你可以。 委托只是mgtwitterengine中的一个变量。只需在下一个视图控制器中添加它的一个实例,添加适当的头和inplementation调用。 安装新的视图控制器集后:

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

    然后调用NextView控制器。 当您返回代理时,不要忘记将其设置回原始视图控制器(在viewdidappear或viewwillappear上)

    希望有帮助… 祝你好运!

        3
  •  0
  •   Nate Symer    12 年前

    在代理中使用nsnotifications。

    将视图控制器设置为希望代理添加观察者的位置。让mgtwitterengine的委托方法发布通知。