使用MGTwitterEngine Singleton

时间:2011-05-19 06:57:28

标签: iphone mgtwitterengine

我读到了Change the delegate of MGTwitterEngine并且没有真正理解它。我希望有人能再解释一下。

根据我所知,我为MGTwitterEngine创建了一个包装器,并在包装​​器中设置了委托。所以为了更容易,我尝试为接口安装一个NSArray实例,我会在需要时传递它。

以下是收到状态的代码:

- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier
{
    //NSLog(@"Got statuses for %@:\r%@", connectionIdentifier, statuses);

    [statusIds setObject:statuses forKey:connectionIdentifier];
}

所以我希望项目中的任何对象都可以访问sharedTwitterEngine,只要我首先请求信息,然后使用新结果释放statusContainer并将其传递给我的工作对象供以后使用。

我不确定这是不是正确的方法,还是有更简单的方法让我错过了?

1 个答案:

答案 0 :(得分:1)

S.O.提出的解决方案。发布链接可以通过这种方式实现:

1)为MGTwitterEngine创建一个包装器;这个包装器将公开你需要MGTwitterEngine的任何选择器,并将为每个选择器添加一个参数,该参数标识正在调用它的视图控制器;

2)你的MGTwitterEngine包装器将作为发送的所有请求的唯一代理;

3)对于包装器从视图控制器接收的每个请求,包装器将视图控制器地址存储在与twitter id关联的NSMutableDictionary中;

4)当响应返回时,委托(与包装器是同一个对象)将找出最初发送请求的视图控制器(通过在字典中搜索响应附带的twitter id),并转发对它的回应。

我希望这有帮助......

编辑:

这就是你如何做到的(我只包括一个API调用和相关代码):

@interface TwitterClientViewController : UIViewController <MGTwitterEngineDelegate> {
}
@end

@implementation TwitterClientViewController;

- (void)requestListOfUsers:(NSString*)username {
    [twitterEngineSingleton getListsForUser:username requestDelegate:self];
}

- (void)requestSucceeded:(NSString*)connectionIdentifier {
    NSLog(@"Hello");
}
@end

@interface AdvancedTwitterEngine : NSObject <MGTwitterEngineDelegate> {
    MGTwitterEngine* _engine;
    NSMutableDictionary* _callerIds;
}
-(NSString*)getListsForUser:(NSString*)username requestDelegate:(id<MGTwitterEngineDelegate>)delegate;
@end

@implementation AdvancedTwitterEngine;

-(void)init {
    if (self = [super init]) {
        _engine = [[MGTTwitterEngine alloc] initWithDelegate:self];
        _callerIds = <init>
    }
    return self;
}

-(NSString*)getListsForUser:(NSString*)username requestDelegate:(id<MGTwitterEngineDelegate>)delegate {
    NSString* twId = [_engine getListsForUser:username];
    [_callerIds setObject:controller forKey:twId];
    return twId;
}

//-- delegate methods

- (void)requestSucceeded:(NSString*)connectionIdentifier {
    id<MGTwitterEngineDelegate> dlg = [_callerIds objectForKey:connectionIdentifier];
    [dlg requestSucceeded:connectionIdentifier];
}

@end