我读过关于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,然后将其传递给我的工作对象以供以后使用。
我不确定这是不是正确的方法,或者有没有我错过的更容易的方法?
发布于 2011-05-19 15:27:48
S.O. post you链接提出的解决方案可以通过以下方式实现:
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];
}
@endhttps://stackoverflow.com/questions/6054923
复制相似问题